AngularJS中的共享服务

时间:2014-04-04 04:43:48

标签: javascript angularjs

我有一个触发自定义模式的按钮(我使用了此处的模态http://codepen.io/m-e-conroy/pen/ALsdF

该按钮位于MainController控制器中。

MainController

app.controller('MainController', function($scope, sharedService) {
    $dialogs.create('dialog.html', 'SecondController',
        {}, {key: false, back: 'static'});

    // Start broadcast
    sharedService.prepForBroadcast('Hello AngularJS');
});

SecondController

app.controller('SecondController', function($scope, sharedService) {
    // This piece of code doesn't get called.
    $scope.$on('handleBroadcast', function() {
        console.log('received broadcast');
    });
});

sharedService

app.factory('sharedService', function($rootScope) {
    var data = {message: ''};

    data.prepForBroadcast = function(message) {
        this.message = message;
        $rootScope.$broadcast('handleBroadcast');
    };

    return data;
});

我的问题是:在SecondController中,为什么它不听广播?为什么这段代码(在上面的SecondController中注释)永远不会被执行?

2 个答案:

答案 0 :(得分:1)

在第二个控制器中使用 $ rootScope.on 而非 $ scope.on

服务正在改变rootcope而不是第二个控制器范围。

答案 1 :(得分:0)

我只是对您的示例进行了简单的设置,一切似乎都有效,所以您的代码中必须有其他内容。

使用您的代码的工作示例: http://jsbin.com/rosutoya/2/edit

您是否有可能因为您的网页实际上没有2台控制器正在运行而未能看到您的期望?