2013-05-10 2 views
7

Есть ли в любом случае log, если связанное свойство или выражение терпят неудачу?Можете ли вы регистрировать угловые ошибки привязки данных?

т.е.

<input type="text" ng-model="user.name" /> 

входа, когда пользователь или имя не определено?

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

Imaginge, что я меняю код JS так, чтобы имя теперь было user.firstName, и я забыл обновить свое представление. Я бы хотел, чтобы он регистрировался во время выполнения, поэтому я могу это исправить.

+0

Вы должны убедиться, что ваши данные действительны в вашем контроллере – Ven

+0

Я хочу знать, получили ли переменные имена из-за синхронизации между представлением и контроллером/областью –

+0

, как это могло произойти? – Ven

ответ

1

Как уже упоминалось в комментариях, привязка данных не будет «отказываться» сама по себе, когда атрибут не определен в области видимости, но будет создавать этот атрибут в области прозрачно.

Если вам нужно какое-либо поведение уведомления, когда имя не найдено, вы можете получить его вручную, украсив директиву ng-model, чтобы проверить, определено ли его значение в области в момент его вставки в DOM.

.config(['$provide', function($provide) { 
     $provide.decorator('ngModelDirective', ['$delegate', function($delegate){ 
      var directive = $delegate[0]; 

      // Save the old link function 
      var link = directive.link; 
      directive.compile = function() { 
       return function(scope, element, attrs) { 
        link.apply(this, arguments); 

        // Now that we've applied the old link function, we can add 
        // any extra checks or steps we want 
        if (!objHasProperty(scope, attrs.ngModel)) { 
         alert("using ng-model value '" + attrs.ngModel +"' that wasn't defined first!" 
        } 
       }; 
      }; 

      return $delegate; 
     }]); 
    }]) 

Это проверит определение значения модели ng в области управления и предупреждения, если оно не установлено.

См. Рабочий jsfiddle, как это может занять опечатка.

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

Также см. this nice blog post для получения дополнительной информации о директивах по декорированию.

+0

Просто попробовал это сейчас с помощью Angular 1.3.8 и нахожусь в неопределенном значении для ссылки при попытке вызвать метод apply. директива.link не определена. : -/Не знаю достаточно об этом, чтобы пойти гораздо глубже сейчас. –