在控制器內綁定服務/工廠變量可以很好地工作,除非工廠變量通過$ 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