2014-09-07 2 views
3

Вот ссылка на код:angularjs window.alert() при использовании mouseEvents вызывает ошибку

http://plnkr.co/edit/usrmiNkj5YJY5SlV8ETw?p=preview

Откройте вашу консоль JavaScript и нажмите на кнопку «сказать привет». Это вызовет ошибку, к которой применяется $ apply, уже выполняется.

Но когда вы удалите этот кусок кода:

ng-controller="mouseEvents" ng-mousedown="onMouseDown()" ng-mouseup="onMouseUp()" ng-mousemove="onMouseMove()" 

и после сохранения при нажатии на кнопку «сказать привет» исчезла ошибка.

Как я могу это решить?

Мне нужно, чтобы указатели мыши устанавливали флаги, если мышь не работает, или если она предназначена для нескольких разных контроллеров. Я не могу просто удалить его в своем коде.

Edit:

Следующая угловая версия решить мою проблему без $ таймаута v1.3.10 или выше

+0

Я не вижу никаких сообщений об ошибках в консоли, ни в Chrome (27), ни в FF (32). –

+0

Вы используете оповещение в своем исходном коде? http://plnkr.co/edit/sLdVSX?p=preview – PSL

+0

@PSL да, я вижу, вы видите сообщения об ошибках? – Ismail

ответ

5

Использование $ таймаут, чтобы угловая отделка загрязнен проверка затем показать предупреждение.

app.controller("demoController",function($scope,$window, $timeout){ 
    $scope.save = function(){ 
    $timeout(function(){ 
     window.alert("hi!"); 
    }); 

    }; 
}); 

Plunkr: http://plnkr.co/edit/Kxbey5Rc43xsB9v5ugZ5?p=preview

+0

Он работает! Можете ли вы дать ссылку или объяснить более глубоко о том, почему она работает, и почему у меня была ошибка? Вы видели ошибку, прежде чем использовать $ timeout? – Ismail

+0

Я не думаю, что это хорошая практика использовать $ timeout каждый раз, когда я хочу использовать window.alert() – Ismail

+0

Это потому, что вы нажали кнопку moveown/up. Всякий раз, когда отображается окно предупреждения, браузер останавливает дальнейшее выполнение javascript до тех пор, пока пользователь не ответит, если выполняется угловая грязная проверка, тогда он дает вам ошибку. Я предполагаю, что вы не хотите показывать предупреждение о производстве, тогда $ timeout не понадобится. – pankaj

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