2013-02-15 2 views
2

В одной строке моего кода у меня есть что-то вроде этого:AngularJs или JavaScript выждать некоторое условие

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

Однако, как обычно, он блокирует мой браузер. Я должен подождать, пока не вернется выполнение следующей строки кодов. Я не хочу блокировать свой браузер, и другие функции должны работать, потому что (некоторые из других обстрелянных событий изменят ситуацию моего хода). Пользователь должен продолжать все, что он делает.

Это для освежения графика, пока не наступит мой поворот.

+0

Помогли ли какие-либо ответы? –

+0

@ShaiRez Я решил проблему с классическим Javascript образом, но я ищу ее реализовать с помощью $ watch – kamaci

ответ

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

+0

privilege не является переменной сферы bu, это определенная переменная, но для меня она не определена? – kamaci

+0

правильный синтаксис для области. $ Watch is $ scope. $ Watch ("isMyTurn (privelege)", function (newVal, oldVal) {if (newVal! == undefined) { // сделайте свой материал здесь ... } }); Я считаю, что вы уже знаете, что угловые работы с грязной проверкой. Итак, когда изменяется значение выражения часов, угловые вызовы, которые возвращают функцию, предоставляя вам новое значение и старое значение этого выражения .. Сколько раз эта функция не гарантируется, поэтому вы не должны полагаться на него. – ganaraj

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 in angular .. – ganaraj

Смежные вопросы