Javascript 如何使用angularjs更改延迟后的值?

Javascript 如何使用angularjs更改延迟后的值?,javascript,angularjs,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> va

我基于
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>    
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); 
如您所见,我尝试在3秒后通过两种方式将
val
更改为
true
,但没有人为我工作。真奇怪。我错过什么了吗

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

谢谢

以下是我的示例:

尝试使用:

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);       
} 

您正在对angular所知范围之外的范围进行更改(在超时时间内)。
因此,您应该使用
$timeout
。。否则,您必须使用
$scope.$apply()

对于超时,请使用
$timeout
,它将为您调用
$scope.$apply()

同样,对于ajax,使用
$http

如果无法使用这些,则必须自己调用
$scope.$apply()

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

谢谢,我知道,事实上,在收到Ajax的响应后,我会尝试更改值,但假设是相同的问题。为了回答这个特定的问题,我可能需要看一个真实的例子,说明您正在尝试完成的任务。@这里-简单地说“不工作”并没有多大帮助。您是否看到了特定的错误?这可能是因为函数在回答后发生了变化,但是链接仍然应该是相关的()+1对于像我自己这样提到$apply for ng的新手来说,这是一个很好的解释:
 window.setTimeout(function() {
     $scope.$apply(function() {
        $scope.val = true;
     });
 }, 3000);