简单的$ watch on service不起作用,但可以访问服务

时间:2013-05-01 04:48:52

标签: angularjs

我正在接受AngularJS,而我遇到了一个我似乎无法看到变量的问题,看起来非常简单,但我无法弄清楚出了什么问题。

服务

app.factory('pathModalService', function() {
var path;
return {
    getPath: function(){
        console.log('get path');
        return path;
    },
    setPath: function(newPath){
        console.log('set path:' + newPath);
            path = newPath;
    }
}
});

设置

的控制器
app.controller('PathsCtrl', ['$scope', 'pathModalService', function($scope, pathModalService){
$scope.edit_path = function(){
    pathModalService.setPath('test1');
}
}]);

正在观看的控制器

app.controller('PathModalCtrl', ['$rootScope', 'pathModalService', function($scope, pathModalService){
$scope.$watch(pathModalService.path, function() {
    console.log('Change to Path');
}, true);
$scope.test = function(){
    console.log(pathModalService.getPath());
}
}]);

包含路径模式服务正常工作,因为我可以强行读取它,但看着它除了应用程序第一次运行(奇怪)时什么都不做。

小提琴:http://jsfiddle.net/7QbCG/10/

1 个答案:

答案 0 :(得分:2)

pathModalService.path未定义,因为path是一个闭包变量。您需要在pathModalService.getPath

上注册手表
$scope.$watch(pathModalService.getPath, function() {
    console.log('Change to Path');
}, true);

演示:Fiddle

fiddle我的测试o / p enter image description here