我正在尝试从$ http.get.then函数中更改范围中的变量,但它写入未定义。 target.html成功加载,我试过并阅读了回复。
$scope.loaded_view = "before";
$scope.getView = function(name) {
$http.get(chrome.extension.getURL("/views/" + name + ".html")).then(function(response, stat, xhr) {
$scope.loaded_view = "after";
});
console.log($scope.loaded_view); //--> before
}
$scope.getView('target');
console.log($scope.loaded_view); //—> before
答案 0 :(得分:3)
这是因为您的get request
需要时间才能执行
Javascript
从top
执行到bottom
您可以将$http
视为timeout
服务,只需几分钟即可获得响应。我创建了一个plunker
来演示
在console.log
内移动get function
并在回复后
$scope.loaded_view = "before";
console.log('this is printed first(1)')
$scope.getView = function(name) {
$http.get(chrome.extension.getURL("/views/" + name + ".html")).then(function(response, stat, xhr) {
$scope.loaded_view = "after";
console.log($scope.loaded_view); //--> after
console.log('this is printed third(3)')
});
console.log('this is printed second(2)')
}
$scope.getView('target');
我添加了三个console.log()
更清晰,你可以观察那些
我添加的控制台序列让您更清楚:
Plunker demonstrating the timeout delay
注意:强>
即使在
before
中打印console.log
,您的html
也会 如果值更改,请使用new value
进行更新 当范围值更改时,角度运行digest cycle
。