我试图在页面加载后在Angular中调用一个函数,以查看表单字段是否已自动填充。正在调用该函数,但出于某种原因,只有当我离开字段,更改选项卡,最小化浏览器等时才调用该函数。如何在不要求用户执行任何这些操作的情况下完成此操作(即,它被调用页面加载后2.5秒无论如何)。我在下面尝试了两种不同的实现,但它们的行为方式相同。
方法1:
var timer=false;
$scope.$watch('email', function(){
if(timer){
$timeout.cancel(timer)
}
timer= $timeout(function(){
$scope.emailChanged();
}, 250)
});
方法2:
<div class="form-managed" ng-init="load()"></div>
$scope.load = () => {
setTimeout(() => {
$scope.emailChanged();
}, 2500);
};
更新:
从评论我改变代码使用$ timeout而不是其他实现。我还验证了在任何实现中都调用了该函数,但是当我尝试提取它时,该字段的值仍显示为null。目前的代码如下。
$timeout(() => {
debugger;
var thisEmail = document.getElementById("buyerEmail");
$scope.emailChanged();
}, 5000);
输入字段:
<input type="email" class="form-control input-lg" name="email" id="buyerEmail" placeholder="Email address" autocomplete="email" ng-model-options="{updateOn: 'blur'}" ng-change="emailChanged($event)" required />
答案 0 :(得分:2)
添加延迟的时间没有区别。如果您从代码中填充了电子邮件输入的值,则Angular不会看到更改。这就是为什么只有在调整大小或进行其他强制Angular处理页面的更改时才会看到反映的更改。
虽然你没有显示它,但我假设你有一些代码来分配电子邮件值。这样的事情,也许是:
$("txtEmail").val(myEmailVariable);
将其更改为:
$timeout(function () {
$("txtEmail").val(myEmailVariable);
});