如何使用angularjs在延迟后改变值?

Max*_*tin 39 javascript angularjs

我基于创建了基本应用程序 angularjs

HTML:

<div ng-app="miniapp">
<div ng-controller="Ctrl">
    My name is 
    <input type="text"/>   
    Val: {{val}}
    <br/>
    <button ng-disabled="val">Submit</button>        
</div>    
Run Code Online (Sandbox Code Playgroud)

JS:

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

var glob;
function Ctrl($scope) {      
    glob = $scope;    
     $scope.val = false;

     window.setTimeout(function() {
            $scope.val = true;
        }, 3000);             
}

 window.setTimeout(function() {
            glob.val = true;
        }, 3000); 
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我尝试通过2种方式在3秒之后改变val,true但没有人为我工作.真奇怪.我错过了什么?

实际上我在尝试从Ajax获得响应后尝试更改值,但是假设应该是同样的问题.

谢谢,

这是我的例子:http: //jsfiddle.net/6uKAT/20/

Cha*_*ase 76

尝试使用: $timeout

Angular的window.setTimeout包装器.fn函数被包装到try/catch块中,并将任何异常委托给$ exceptionHandler服务.

$timeout(fn[, delay][, invokeApply]);

更新小提琴

JavaScript的

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

function Ctrl($scope, $timeout) {  
     $scope.val = false;
     $timeout(function(){$scope.val = true}, 3000);       
} 
Run Code Online (Sandbox Code Playgroud)

  • @HereHere - 简单地说"不工作"并不是很有帮助.您看到的是否有特定错误?自从这个问题得到解决后,该功能可能已经改变,但该链接仍应相关(https://docs.angularjs.org/api/ng/service/$timeout) (3认同)

Aus*_*eco 27

您正在更改范围之外的范围(在超时内).
所以你应该使用$timeout..否则你必须使用$scope.$apply()

$timeout(function() {
    $scope.val = true;
}, 3000); 
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/6uKAT/21/

对于超时使用$timeout,它会打电话$scope.$apply()给你.
同样,对于ajax使用$http.

如果您不能使用这些,那么您必须打电话给$scope.$apply()自己:

 window.setTimeout(function() {
     $scope.$apply(function() {
        $scope.val = true;
     });
 }, 3000);
Run Code Online (Sandbox Code Playgroud)