サービスを使用して2つのコントローラ間でデータを共有しようとしています。しかし、私はXHRでデータを変更した後にデータの更新を見ていません。角度の大きいコントローラ間で大きなオブジェクトを共有
angular
.module('appy', [])
.service('MyService', function($http){
return {
dataToChange: {
},
ajaxy: function(url){
var self = this;
setTimeout(function(){
console.log('now we are in the service!');
self.dataToChange = 'something new';
console.log(this.dataToChange);
}, 1000);
}
};
})
.controller('c1', ['$scope', 'MyService', function($scope, MyService){
$scope.myService = MyService;
$scope.ajaxy = function(){
$scope.myService.ajaxy();
};
}])
.directive('dirOne', function(){
return {
restrict: 'E',
templateUrl: 'dirone-temp.html'
};
})
.controller('c2', ['$scope', 'MyService', function($scope, MyService){
$scope.myData = MyService.dataToChange;
}])
.directive('dirTwo', function(){
return {
restrict: 'E',
templateUrl: 'dirtwo-temp.html'
};
});
ajaxy
が更新されても何も起こりません。私はthis questionのようにこれを設定しようとしました。喜びはありません。私も時計を追加しようとしました。
$scope.$watch(function(){
return MyService.ajaxy();
}, function(oldVal, newVal){
$scope.somethingToChange = newVal;
console.log($scope.somethingToChange);
});
しかし、何も起こりません。また、このオブジェクトはかなり大きいです。私は$watch
したくないです。
まず第一にちょうどFYI、 'setTimeout'で、あなたの' this'はwindow' 'を参照しています。 'setTimeout'コールバックをオブジェクトにバインドする必要があります(しかし、これはあなたの主な問題を解決しません)。 –
素晴らしい点。私はこれを嘲笑していたときにそれを考えなかった。ありがとう! – 1252748
私はそのコントローラのデータを取得してc1とc2の間で共有できるように、ルートコントローラを使用することをお勧めします。 – sniels