使用Angular在页面加载延迟后调用函数

时间:2016-07-01 20:45:09

标签: javascript angularjs

我试图在页面加载后在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 />

1 个答案:

答案 0 :(得分:2)

添加延迟的时间没有区别。如果您从代码中填充了电子邮件输入的值,则Angular不会看到更改。这就是为什么只有在调整大小或进行其他强制Angular处理页面的更改时才会看到反映的更改。

虽然你没有显示它,但我假设你有一些代码来分配电子邮件值。这样的事情,也许是:

$("txtEmail").val(myEmailVariable);

将其更改为:

$timeout(function () {
  $("txtEmail").val(myEmailVariable);
});