AngularJS中$timeout注入后不生效,函数被立即执行求助
解决$timeout立即执行函数的问题
嘿,这问题我之前也踩过坑,很容易搞混!你现在的代码之所以会让checkLogin立刻执行,核心问题是你直接调用了函数,而不是把函数引用传给$timeout。
问题根源
你当前的写法:
$timeout($scope.checkLogin("s" , "s"), 4000);
这里的$scope.checkLogin("s" , "s")会被JavaScript立即执行,然后把这个函数的返回值(你的函数没有return语句,所以返回undefined)传给$timeout。相当于你其实是让$timeout等4秒后执行undefined,而checkLogin本身早就跑完了。
正确的解决方式
有两种常用的写法可以解决这个问题:
1. 用匿名函数包裹调用
这是最直观的方式,把你的函数调用放在一个匿名函数里,把这个匿名函数传给$timeout:
$timeout(function() { $scope.checkLogin("s", "s"); }, 4000);
这样$timeout拿到的是一个函数引用,会在4秒后执行这个匿名函数,进而调用你的checkLogin并传递参数。
2. 使用bind绑定参数和上下文
如果你不想写匿名函数,可以用Function.prototype.bind来绑定函数的上下文和参数,生成一个新的函数传给$timeout:
$timeout($scope.checkLogin.bind($scope, "s", "s"), 4000);
bind($scope, "s", "s")会创建一个新函数,这个函数执行时会以$scope作为上下文,并且自动把s和s作为参数传入checkLogin。
额外确认
看你的控制器头部已经正确注入了$timeout,这部分没问题,不用调整~
内容的提问来源于stack exchange,提问作者Soham Banerjee
相关产品推荐
相关产品推荐

