我编码了这个:
$interval(us.isAuthenticated(), 5 * 1000);
auth服务已注入us服务。
代码只调用isAuthenticated一次,然后不再调用它。有没有办法解决这个问题,还是我不能以这种方式使用$ interval?如果我在控制器中调用$ interval来怎么样?我已经尝试过使用app.run调用的函数,但是它不能同时工作
答案 0 :(得分:2)
您的代码等同于以下内容:
var v = us.isAuthenticated();
$interval(v, 5 * 1000);
因此,假设us.isAuthenticated()
返回一个布尔值,您将此布尔值传递给$interval
。这不是$interval
所期望的。它期望一个函数重复调用。所以代码应该是
$interval(us.isAuthenticated, 5 * 1000);
或
$interval(function() {
us.isAuthenticated();
}, 5 * 1000);
或
var functionToRepeat = function() {
us.isAuthenticated();
};
$interval(functionToRepeat, 5 * 1000);
因此,简而言之,您必须传递一个函数,而不是传递函数返回的值。
答案 1 :(得分:1)
你应该从函数调用中调用interval函数或者你可以传递引用,除了@JB Nizet的回答你还应该考虑下面的模式来调用$interval
,如下invokeApply
是其中一个参数通过使用你可以关闭该参数的脏检查。
<强>代码强>
$interval(function() {
us.isAuthenticated();
},
5 * 1000, //delay,
100, //[count] it accepts number,
true, //[invokeApply]
{ param: 1} //any [Pass]
);