在angularjs中使用带有rootScope事件的工厂

时间:2015-08-14 09:33:21

标签: javascript angularjs

我正在尝试在rootScope事件中使用我工厂的字段,但它似乎不起作用:

ngModule.factory('MyFact', ['$rootScope', function ($rootScope) {
        function MyFact(opts) {
            this.blah= opts.blah;
        }
        $rootScope.$on('$stateChangeStart', function() {
            alert('This is my directive listening stateChangeStart' + this.blah);
        });

        return MyFact;
    }]);

显示的内容是:'这是我的指令监听stateChangeStartundefined'。

为什么我不能这样做?

2 个答案:

答案 0 :(得分:1)

this.blah超出了范围。

this.blah中的$rootScope.$on无法看到它在更大范围内可用,因此您的功能可以看到它。

答案 1 :(得分:1)

您必须使用私人var才能在$rootScope.$on function中访问它,因为它已脱离了上下文:

ngModule.factory('MyFact', ['$rootScope', function ($rootScope) {
    var _blah;

    function MyFact(opts) {
        _blah= opts.blah;
    };

    $rootScope.$on('$stateChangeStart', function() {
        alert('This is my directive listening stateChangeStart' + _blah);
    });

    return MyFact;
}]);