Angular.js: используйте код цвета в $ watch

0

как я могу использовать цветовой код в переменной String и связать эту переменную с выражением $ watch?

$scope.$watch($scope.backgroundTextColor, function(){
      // code inside function
});

С примером кода я получаю следующую ошибку:

"Error: [$parse:lexerr] Lexer Error: Unexpected next character  at columns 0-0 [#] in expression [#9c5c5c]...
  • 0
    А что внутри // code inside function ?
  • 0
    Вы должны показать нам немного больше, не могу помочь вам с этим
Показать ещё 1 комментарий
Теги:
lexer
watch

3 ответа

2
Лучший ответ

Вы передаете значение $scope.backgroundTextColor

Вам нужно передать имя переменной, например

$scope.$watch('backgroundTextColor', function(newValue, oldValue){
      // code inside function
});

Посмотрите, как реагировать на изменения сферы охвата

  • 0
    Хороший ответ! это сработало! когда я пишу имя переменной между кавычками, а в приложении меняю цвет, отладчик останавливается внутри функции наблюдения. Большое спасибо!
1

Здесь вы пытаетесь использовать магическую строку.

Функция $watch в Angular может либо взять функцию, которая возвращает значение, которое вы хотите просмотреть, или строку, которая ссылается на переменную, которую вы хотите посмотреть (волшебная строка).

Строка будет ссылаться на переменную, как если бы вы были в HTML. Поэтому, если вы используете $scope (который, как вам кажется, вам нужен), вам нужно:

$scope.$watch('backgroundTextColor', function(newValue, oldValue){
      // code inside function
});

Если у вас есть набор псевдонимов (например, с помощью ControllerAs) для контроллера, вам нужно будет указать, что:

$scope.$watch('ctrl.backgroundTextColor', function(newValue, oldValue){
      // code inside function
});

В противном случае вы можете использовать функцию:

$scope.$watch(function() {
    return $scope.backgroundTextColor;
}, function(newValue, oldValue){
      // code inside function
});
  • 0
    С первым примером это работает
0

Вместо того, чтобы поместить переменную как есть в выражении $watch, попробуйте вернуть значение переменной:

$scope.$watch(function() { return $scope.backgroundTextColor }, function() {
      // code inside function
});

Я предпочитаю использовать только переменную, а не ее строковое представление HTML (backgroundTextColor), таким образом, вы более агностичны для представления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню