在控制器内绑定服务/工厂变量可以很好地工作,除非工厂变量通过$ http启动。谁能解释为什么?Angularjs:数据绑定不起作用
注意:由于controller.someVariable = factory.someVariable不起作用。目前,我直接引用工厂变量操作为 factory.someVariable
控制器:
app.controller('SecondCtrl',function($scope,testFactory){
$scope.obj = testFactory.obj;
$scope.factory = testFactory;
$scope.jsonData = testFactory.jsonData; //Not Binding
//Accessing $scope.factory.jsonData works while $scope.jsonData doesn't
});
厂:
app.factory('testFactory', ['$rootScope','$http',function ($rootScope,$http) {
var factory = {};
factory.obj = { 'name':'Jhon Doe'};
factory.jsonData;
factory.fromjson = function() {
$http.get("data.json")
.success(function(data){
factory.jsonData = data.result;
})
}
factory.fromjson();
return factory;
}]);
Plunker:http://plnkr.co/edit/wdmR5sGfED0jEyOtcsFz?p=preview
'$ http'是异步的,你需要返回承诺,你试图立即返回数据,即使它还没有从服务器返回。因为这些都是原始的,而不是对象,它们不会相互“绑定”,而是试图将一个值赋值给另一个的值。 – Claies
仅当从服务器接收到数据时,factory.jsonData才会更新。那时引用工厂变量的控制器变量必须自行更新? –
控制器变量不会自行更新,不。这些不是对象,它们是原始的。在第一种情况下,您正在访问'factory'对象的基本属性,在第二种情况下,您正在访问'$ scope'上的基元。 – Claies