2013-02-15 68 views
2

在我的一行代码我有类似的东西:AngularJs或JavaScript等待一些条件

... 
while(!$scope.isMyTurn(privilege)){} 
I will run next line of codes 

然而像往常一样它阻止我的浏览器。我必须等到真正运行下一行代码。我不想阻止浏览器和其他功能应该工作,因为(其他一些被触发的事件会改变我的状况)用户应该继续他所做的一切。

这是为了刷新图形,直到轮到我。

+0

做了任何答案的帮助吗? – 2013-02-16 17:55:18

+0

@ShaiRez我已经解决了古典Javascript方式的问题,但我期待实现它与$手表 – kamaci 2013-02-18 06:42:11

回答

7

你应该做的是这样的:

$scope.$watch("isMyTurn(privilege)",function(val){ 
    if(val){ 
     //I will run next line of codes 
    } 
}); 

,而不是要尝试做.. 注意,在这种情况下什么,privilege应该也是一个scope变量就像

$scope.privilege 

如果你不想要它是一个scope变量只是不传递它作为参数。但直接访问它的功能..

希望这会有所帮助..

+0

我已经解决了它通过古典的Javascript方式,但最好是用功能上的Angular Js来完成。你能解释一下val变量吗?我怎样才能改变频率来检查下一次观看时间? – kamaci 2013-02-18 06:41:32

+0

权限不是范围变量它是一个定义的变量,但我得到了它的未定义? – kamaci 2013-02-18 08:23:56

+0

适用范围的语法$ watch是 $ scope。$ watch(“isMyTurn(privelege)”,function(newVal,oldVal){if(newVal!== undefined){ //在这里做你的东西...... } }); 我相信你已经知道角度工作与脏检查。因此,当监视表达式的值更改时,角度调用回调函数为您提供新值和该表达式的旧值..此函数多少次被称为是不能保证的,所以你不应该依赖它.. – ganaraj 2013-02-18 09:22:22

1

我不知道angularJS但在正常的JavaScript,你可以使用setTimeout

function whenReady() 
{ 
    if ($scope.isMyTurn(privilege)){ 
    I will run next line of codes 
    } 
    else 
    { 
    window.setTimeout(whenReady, 1000); 
    } 
} 
window.setTimeout(whenReady, 1000); 
+1

请不要这样做..这是不正确的做法.. atleast的方式.. – ganaraj 2013-02-15 12:01:38