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