使用Angular在页面加载延迟后调用函数
Call function after delay on page load using Angular
我试图在加载页面后调用Angular 2.5中的一个函数,以查看表单字段是否已自动填充。该函数正在被调用,但由于某种原因,只有在我从字段中导航、更改选项卡、最小化浏览器等情况下才会调用。我怎么能做到这一点,而不要求用户做任何这些动作(即它被称为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代替我的其他实现。我还验证了该函数在任何实现中都被调用,但是当我试图提取它时,该字段的值仍然显示为空。当前代码如下。
$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 />
你添加的延迟长度没有关系。如果你从代码中填充了email输入的值,Angular不会看到这个变化。这就是为什么只有当你调整大小或做一些其他迫使Angular处理页面的改变时,你才会看到变化的反映。
虽然您没有显示它,但我假设您在某处有一些代码来分配电子邮件值。比如:
$("txtEmail").val(myEmailVariable);
改成:
$timeout(function () {
$("txtEmail").val(myEmailVariable);
});
相关文章:
- jQuery延迟了ajax调用的循环
- 使用jquery延迟对象链接多个ajax调用
- jQuery通过嵌套的ajax调用延迟对象
- jQuery 延迟的 AJAX 调用返回值
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- AJAX 调用和表单提交之间的延迟
- 如何按顺序调用延迟函数
- 使用promise或setTimeout确定延迟函数的调用顺序
- 如何调用具有延迟的函数
- 将动态参数应用于 JavaScript 函数,但延迟调用
- 延迟调用 dojo widget 中的函数,直到设置全局变量
- 多个 ajax 调用的延迟调用
- AngularJS:如何用延迟调用递归函数
- 在异步代码块中处理的多个ajax延迟调用的数组,后面是同步的最终代码块
- 如何处理嵌套的jquery延迟调用
- 是否使用负延迟调用setTimeout
- 顺序的、依赖的延迟调用
- Angular服务的Jasmine测试不能解决延迟调用
- 如何一个接一个地延迟调用javascript函数
- 延迟1调用setTimeout的目的是什么