2013-09-27 3 views
0

У меня есть модель, и я смотрю эту модель для некоторых изменений с функциями, связанными в $ watch. И у меня есть функция, привязанная к ngClick, которые меняют модель. Мне нужно уметь предотвращать вызов вызывающего устройства в ngClick, потому что мне не нужен трек, который изменяется, но если модель изменилась каким-то другим способом, кроме функции привязки ngClick, я хочу, чтобы слушатели работали.

Но я не хочу развязывать слушателей, я просто хочу, чтобы он прекратил выполнение на текущий момент.

пример:

$scope.AlertIfChange = function(){ 
alert('model changes!'); 
}; 

$scope.watch(model, AlertIfChange, true); 

$scope.clickHandler = function(){ 
$scope.model = "changed by click"; 
-- some stuff to prevent AlertIfChange invocation -- 
}; 

ответ

0

Вы можете сделать что-то вроде этого:

$scope.AlertIfChange = function(){ 
    if(!$scope.clickChanged){   
     alert("I was not changed by click"); 
    } 
    else{ 
     alert("I was changed by click"); 
    } 
}; 
$watch(model, AlertIfChange, true); 

$scope.clickChanged = false; 

$scope.clickHandler = function(){ 
    $scope.model = "changed by click"; 
    $scope.clickChanged = true; 
} 
+0

Да, это правда. И в настоящее время я реализую его таким образом, но мне любопытно - можно ли это сделать с помощью какого-либо родного пути без флагов. –

+0

Нет. Я так не думаю. – AlwaysALearner

0

Если вам нужна эта функция во многих местах, рассмотреть вопрос о написании директивы, которая работает как нг-клик, но не вызывает обратный вызов до тех пор, пока не будет выполнено определенное условие.

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