2 つの別個のコントローラー間でデータを共有することに関する質問に答えようとしているときに、質問に遭遇しました。
私は通常、このタスクにサービスを使用し、jsfiddle を作成し始めましたが、機能させることができませんでした。
setActivePersonWorks(person)
ダーティチェックでプロパティを動的に作成した場合、少しデバッグした後、2番目のコントローラーが正しい値を示しました。
その値を割り当てた場合、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>