Я пытаюсь создать resusable сервис оповещения, который я назвал бы где-нибудь в моем приложении только с:AngularJs обновить директиву после вызова метода службы
alertService.showAlert('warning', 'something went wrong!');
Например, после Ajax вызова бэкэнд API. Сейчас я использую фабрику и директиву, но кажется, что я делаю что-то неправильно, потому что директива не обновляется после вызова метода showAlert. Сейчас у меня есть что-то вроде этого:
var srv = angular.module('srv', []);
srv. factory('alertService', ['$timeout', function($timeout){
var alertService = this;
alertService.alertNeeded = false;
alertService.alertClass = '';
alertService.alertMessage = '';
alertService.setAlertNeeded = function(){
alertService.alertNeeded = true
};
alertService.setAlertClass = function(type){
if(type === 'warning')
alertService.alertClass = 'alert-warning';
if(type === 'success')
alertService.alertClass = 'alert-success';
if(type === 'info')
alertService.alertClass = 'alert-info';
if(type === 'danger')
alertService.alertClass = 'alert-danger';
};
alertService.setAlertMessage = function(message){
alertService.alertMessage = message;
};
return {
showAlert: function(class, msg){
alertService.setAlertNeeded();
alertService.setAlertClass(class);
alertService.setAlertMessage(msg);
}
};
}]).
directive('myAlerts', ['alertService', function(alertService){
return {
restrict: 'A',
template: '<div ng-class="alertClass" ng-show="alertNeeded">{{alertMessage}}</div>',
link: function(scope){
scope.alertNeeded = alertService.alertNeeded;
scope.alertMessage = alertService.alertMessage;
scope.alertClass = alertService.alertClass;
}
}
}]).
controller('alertShowingController', ['$scope', 'alertService', function($scope, alertService){
alertService.showAlert('warning', 'Warning alert!!!')
}]);
Мой код не выглядит точно так же, но я просто хотел показать, что я пытаюсь сделать: я хочу, чтобы позвонить alertService.showAlert(...)
из другого контроллера в другом модуле (который зависит от модуля srv), и таким образом обновите переменные в директиве myAlerts
, чтобы показать правильное предупреждение.
Вещь после вызова метода showAlert Значения установлены, но внутри кода директивы я получаю alertService.alertNeeded
как undefined
.
Я совершенно не знаком с AngularJs, поэтому, возможно, я что-то ошибаюсь, но я провел целый вечер, чтобы заставить его работать, и я до сих пор не знаю, что является правильным решением для этого.
Пожалуйста, помогите!
В принципе, ваш 'scope.alertMessage' должен быть функцией, которая возвращает' alertService.alertMessage'. Затем в шаблоне используйте '{{alertMessage()}}'. Таким образом, отображаемое сообщение будет обновляться каждый цикл дайджеста. –
На самом деле, я был неправ. Объект, возвращаемый фабрикой 'alertService', должен предоставить эти методы. Отвечая сейчас. –