我想在控制器之间“绑定异步数据的变化”。
我知道这可能有点令人困惑,但我希望有可能。
在下面的示例中,如果我在输入中写入内容,则效果很好:http://jsfiddle.net/Victa/9NRS9/
HTML :
<div ng-app="myApp">
<div ng-controller="ControllerA">
ControllerA.message = {{message.hello}}<br/>
<input type="text" ng-model="message.hello"/>
</div>
<hr/>
<div ng-controller="ControllerB">
ControllerB.message = {{message.hello}}<br/>
<input type="text" ng-model="message.hello"/>
</div>
</div>
JS :
angular.module('myApp', [])
.factory('myService', function($q, $timeout) {
var message = {
hello: 'hello world'
};
return {
getMessage : function(){
return message;
}
};
})
function ControllerA($scope, myService) {
$scope.message = myService.getMessage();
}
function ControllerB($scope, myService) {
$scope.message = myService.getMessage();
}
但是,假设我从服务器获取数据。我想像上一个例子中那样“链接”数据。 http://jsfiddle.net/Victa/j3KJj/
问题是我想避免使用“$ broadcast”/“$ on”或在$ rootScope中共享对象。
HTML :
<div ng-app="myApp">
<div ng-controller="ControllerA">
ControllerA.message = {{message.hello}}<br/>
<input type="text" ng-model="message.hello"/>
</div>
<hr/>
<div ng-controller="ControllerB">
ControllerB.message = {{message.hello}}<br/>
<input type="text" ng-model="message.hello"/>
</div>
</div>
JS :
angular.module('myApp', [])
.factory('myService', function($q, $timeout) {
var message = {};
return {
getMessage : function(){
var deferred = $q.defer();
$timeout(function() {
message.hello = 'Hello world!';
deferred.resolve(message);
}, 2000);
return deferred.promise;
}
};
})
function ControllerA($scope, myService) {
$scope.message = myService.getMessage();
}
function ControllerB($scope, myService) {
$scope.message = myService.getMessage();
}
感谢您的帮助。
维克多
答案 0 :(得分:1)
您在promise
的返回对象中返回factory
而不是实际的对象本身。所以在你的范围内,你应该等待修改具体对象的承诺,然后将其分配给$scope.message
示例:
function ControllerA($scope, myService) {
myService.getMessage().then(function(obj){
$scope.message=obj
});
}
我改变了你的小提琴,可能是你的答案,见this小提琴