javascript - Angular 广播在第二次调用时未更新

标签 javascript angularjs angularjs-scope angular-services angular-broadcast

我有一个调用服务的 Controller 。在服务中,我执行 $rootScope.$broadcast ,它在页面加载时完美运行。但是,当我再次调用该服务时,$rootScope.$broadcast 似乎没有被调用。

Controller :

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 Controller 。

页面加载时,从 this.inititate 调用的 $broadcast 已成功调用,并且 {{myValue}} 显示为 1。

但是,在单击具有 ng-click="Next()" 的按钮时,尽管再次调用该服务,但 {{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);
    };
);

关于javascript - Angular 广播在第二次调用时未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248843/

相关文章:

javascript - 不正确的打开多选列表

javascript - 在移动设备上通过路径或名称获取二进制图像(Ionic/Ng cordova 应用程序)

angularjs - 在指令中包装 md-tabs 会产生 "Orphan ngTransclude Directive"错误

angularjs - 在 facebook 上分享时,显示尖括号而不是内容

javascript - 路由和多 View 不显示在 AngularJS 中?

javascript - 通过 jQuery 检查页面标题是否在数组中

javascript - 如何在调用页面事件后刷新数据表?

javascript - addEventListener ('click' , ...) 通过点击 'numbers' 按钮,显示屏上的文本应该等于该数字

javascript - AngularJS 中 $interval 返回的 Promise 的参数是什么?

angularjs - 如何消除这个错误(得到错误 $localStorage.getItem is not a function)?