2017-03-01 82 views
0

我有这个简单的代码片段:

HTML:

<div ng-app="myApp" ng-controller="SampleController"> 
    <p>{{val1}}</p> 
    <p>{{val2}}</p> 
    <input type="button" value="Update" ng-click="update()" /> 
</div> 

的Javascript:

var app = angular.module('myApp', []); 

app.controller('SampleController', ['$scope', function($scope) { 

    $scope.val1 = "Not updated"; 
    $scope.val2 = "Not updated"; 

    $scope.update = function() { 
     $scope.val1 = "Updated outside!"; 

     setTimeout(function() { 
      $scope.val2 = "Update inside!"; 
     }, 1); 
    }; 
}]); 

片段也jsfiddle

如果我点击更新按钮,只有val1值在html中更新。如何解决这个问题?但最重要的是,为什么会发生这种情况?

PS: setTimeout只是简化了问题。事实上,问题是关于任何具有回调函数的自定义组件。

回答

2

setTimeout不会触发摘要循环,所以不会更新视图。 Angular带有一个内置的$timeout模块 - 使用该模块将执行一个摘要循环,并且您的视图将会更新。

要使用:

app.controller('SampleController', ['$scope', '$timeout', function($scope, $timeout) { 
    $timeout(function() { $scope.val2 = "see?" }, 5000); 
}]); 
+0

不错,但如果我使用别的东西,像jQuery.ajax.success或$ http.get。或者是什么东西,没有黑客(如'超时')由angularjs? –

+0

那么'http.get'会触发一个摘要循环 - 所以你的安全。基本上,角模块之外的任何内容不会触发周期,所以你需要解决它与黑客或写你自己的角度模块 – tymeJV

+0

是否有某种方式来通知“消化周期”,一个范围变化maded? –

相关问题