在試圖回答關於在兩個單獨的控制器之間共享數據的問題時,我遇到了一個問題。使用控制器之間的共享服務進行髒檢查,一種方法適用於另一種不適用?
我通常使用服務爲這項任務,並開始創建一個jsfiddle,但我無法讓它工作。
經過一些調試後,如果我在setActivePersonWorks(person)
中動態創建屬性,髒檢查工作,第二個控制器顯示正確的值。
如果我分配了setActivePersonDoesNotWork()
中的值,它沒有。
如果我使用$timeout()
我能夠驗證DataService.badPerson
是否確實包含正確的數據。
我做錯了什麼?我猜如果你用$apply()
做些什麼,它會正常工作,但爲什麼動態地創建值導致事情正常工作?
工作實例:
var myTest = angular.module("MyTest", []);
myTest.factory("DataService", function() {
var People = {
goodPerson: {},
badPerson: {},
setActivePersonWorks: function (person) {
People.goodPerson.name = person.name;
People.goodPerson.id = person.id;
},
setActivePersonDoesNotWork: function (person) {
People.badPerson = person;
}
};
return People;
});
function ViewController($scope, DataService, $timeout) {
$timeout(function() {
DataService.setActivePersonWorks({
id: 1,
name: "Good Mark"
});
DataService.setActivePersonDoesNotWork({
id: 2,
name: "Bad Mark"
});
}, 1000);
}
function DetailController($scope, DataService, $timeout) {
$scope.goodPerson = DataService.goodPerson;
$scope.badPerson = DataService.badPerson;
$timeout(function(){
$scope.message = "DataService has the value: " + DataService.badPerson.name + " but $scope.badPerson is " + $scope.badPerson.name;
}, 2000);
}
的<html/>
<div ng-app="MyTest">
<div ng-controller="ViewController"></div>
<div ng-controller="DetailController">
<h1>Works: {{goodPerson.name}}</h1>
<h1>Does Not Work: {{badPerson.name}}</h1>
{{message}}
</div>
</div>
優秀!感謝修復和解釋。 – 2013-05-09 16:02:32