我希望有人能夠幫助我理解我在AngularJS中使用$ scope的煩人問題。請參閱下面我的代碼中的註釋:
app.controller('MyController', function ($scope, $routeParams, $http, $timeout) {
$scope.id = $routeParams.id;
$http.get("http://server/api/Blah/GetData/" + $scope.id).success(function (data) {
$scope.data = data;
alert($scope.data.MyObject.Property); //displays the expected value. - Not Undefined or null
}).error(function (data) {
alert(data);
});
$scope.$on('$viewContentLoaded', function() {
$timeout(function() {
var d = document.getElementById("iframe");
d.contentDocument.documentElement.innerHTML = $scope.data.MyObject.Property; //Now MyObject is magically undefined.
}, 0);
});
});
對WEB API的調用返回一個有效的對象,該對象被分配給$ scope.data。我顯示一條警告,以確保$ scope.data.MyObject.Property存在,它會這樣做。顯示期望值。
現在,當我嘗試訪問$ viewContentLoaded代碼中的$ scope.data.MyObject.Property時,$ scope.data.MyObject不再位於$ scope中。控制檯報告以下內容:
HTML1300: Navigation occurred. File: route.html TypeError: Unable to get property 'MyObject' of undefined or null reference at Anonymous function (http://server/script/route.js:43:13) at Anonymous function (https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js:158:234) at e (https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js:45:348) at Anonymous function (https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js:48:275)
爲什麼$ scope刪除$ scope.data.MyObject的值?是什麼讓這個問題更令人沮喪的是,如果我把警報(「」);在$ viewContentLoaded代碼中,$ scope.data.MyObject值不再是未定義的。這裏發生了什麼?
所以也許'$ viewContentLoaded'火災你得到來自服務器的響應之前? –
有沒有辦法強制$ viewContentLoaded等待服務器的響應? – Dave
你可以等到http承諾解決 –