AngularJS从$ http.get函数访问范围

时间:2018-04-19 10:49:06

标签: javascript angularjs google-chrome-extension scope

我正在尝试从$ 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

1 个答案:

答案 0 :(得分:3)

这是因为您的get request 需要时间才能执行

Javascripttop执行到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()更清晰,你可以观察那些

的顺序

我添加的控制台序列让您更清楚:

  1. 首先打印(1)
  2. 这是第二次印刷(2)
  3. 这是第三次印刷(3)
  4. Plunker demonstrating the timeout delay

    注意:

      

    即使在before中打印console.log,您的html也会   如果值更改,请使用new value 进行更新   当范围值更改时,角度运行digest cycle