【发布时间】:2016-11-06 19:50:45
【问题描述】:
我希望有人能帮助我理解我在 AngularJS 中使用 $scope 时遇到的烦人问题。请参阅下面我的代码中的 cmets:
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:发生导航。 文件:路由.html TypeError:无法获取未定义或空引用的属性“MyObject” 在匿名函数 (http://server/script/route.js:43:13) 在匿名函数 (https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js:158:234) 在 e (https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js:45:348) 在匿名函数 (https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js:48:275)
为什么 $scope 会降低 $scope.data.MyObject 的值?让这个问题更令人沮丧的是,如果我放了一个 alert("");在 $viewContentLoaded 代码中,$scope.data.MyObject 值不再未定义。这是怎么回事?
【问题讨论】:
-
所以
$viewContentLoaded可能会在您收到服务器响应之前触发? -
有没有办法强制 $viewContentLoaded 等待服务器的响应?
-
你可以等到http promise解决
标签: javascript angularjs