2013-05-01 40 views
1

我正在撿起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()); 
} 
}]); 

包含的路徑模式服務工作正常,因爲我可以強制讀取它,但除了應用程序第一次運行(奇怪)時,它看不到任何內容。

小提琴:因爲pathhttp://jsfiddle.net/7QbCG/10/

回答

2

pathModalService.path未定義是封閉變量。您需要在pathModalService.getPath

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

演示登記表:Fiddle

我的測試O/P爲fiddle enter image description here

+0

感謝您的回答,但這並不依舊會觸發呢? – 2013-05-01 05:12:42

+0

@DavidNguyen你檢查過演示嗎?當你在控制檯上點擊'Test Set'時'Change to Path'被打印 – 2013-05-01 05:14:28

+0

'Change to Path'不顯示在你的小提琴中 – 2013-05-01 05:16:26

相關問題