У меня есть контроллер, который вызывает услугу. В рамках службы я выполняю $ rootScope. $ Broadcast, который отлично работает при загрузке страницы. Однако, когда я снова вызываю услугу, передача $ rootScope. $, Похоже, не называется.
контроллер:
app.controller('MyController', function($scope, myService) {
myService.inititate($scope);
$scope.Next = function () {
myService.next($scope);
};
});
Обслуживание:
app.service("loginService", function ($http, $rootScope) {
var counter = 0;
var checkuser = function (scope) {
//some code.....
$rootScope.$broadcast('rcvrCast', counter + 1);
}
this.inititate = function (scope) {
//some code.....
checkuser(scope);
};
this.next = function (scope) {
//some code.....
checkuser(scope);
};
);
Директива:
app.directive('myDirective', function() {
return {
restrict: 'A',
replace: true,
scope: {},
link: function(scope, element, attrs) {
scope.$on("rcvrCast", function(event, val) {
scope.myValue = val;
});
},
template:
'<section>' +
'<p>{{myValue}}</p>' +
'</section>'
}
});
HTML:
<body ng-controller="ParentController">
<section my-directive></section>
<div ui-view></div>
</body>
На странице index.html
загружается контроллер MyController
.
При загрузке страницы $broadcast
вызов $broadcast
this.inititate
успешно вызывается, а {{myValue}}
отображается как 1.
Однако при нажатии на мою кнопку, которая имеет ng-click="Next()"
, хотя служба снова {{myValue}}
, {{myValue}}
по-прежнему отображается как 1, а не 1 + 1 = 2.
Есть предположения?
Вы не считаете счетчик. Попробуйте использовать ++counter
вместо counter+1
app.service("loginService", function ($http, $rootScope) {
var counter = 0;
var checkuser = function (scope) {
//some code.....
$rootScope.$broadcast('rcvrCast', ++counter);
}
this.inititate = function (scope) {
//some code.....
checkuser(scope);
};
this.next = function (scope) {
//some code.....
checkuser(scope);
};
);