2013-11-29 4 views
3

Я пытаюсь обновить dict значений в родительской области из директивы. Родитель dict обновляется через функцию (объяснено here), поэтому я действительно не понимаю, почему, когда я печатаю values, я вижу их, но при привязке с тегом pre он не меняется. Плюс, почему field.error не отображается в шаблоне директивы?Angular.js - обновление родительской области из директивы

Я создал упрощенную exmaple моей проблемы в этом jsbin

угловой newbi, и совсем расстроенный один ... Спасибо.

ответ

5

Вы используете missing a scope.$apply, когда вы обрабатываете события JS в своей директиве.

Обработка событий происходит в чистом JS, вне угловой контекст, и когда вы вызываете функцию в родительской области, вы вызываете ее так же, как вы вызываете функцию на любом другом простом объекте JS. Сохранение простых объектов JS вместо создания их собственных иерархий объектов, где они могли перехватывать вызовы функций, является выбором дизайна, который Угловой отличается от, скажем, ember.

Значение делает изменение на сфере действия, это просто, что Angular не знает об этом. В следующий раз цикл $digest запускается что-нибудь (скажем, на другой кнопке нажмите ng-click), появится изменение. Однако мы можем убедиться, что цикл $digest запускается путем явного вызова scope.$apply().

Исправление заключается в следующем:

element.bind("blur change keyup", function() { 
    // This will tell Angular to rerun the $digest loop 
    // as we are changing some variables which Angular 
    // should be informed about. 
    scope.$apply(function() { 
    var val = element.find("input").val(); 
    var oldval = scope.values[scope.field.name]; 
    if (oldval !== val && isValid(val)) 
     scope.set_value(scope.field.name,val); 
    //else 
    // scope.set_value(scope.field.name,undefined); 
    }); 
}); 

Работа демо: http://jsbin.com/inoKOVU/1/edit

+0

Почему? Я использую функцию для обновления родительской области, поэтому ... из того, что я краснею, я использую ссылки на родителя, так, где именно этот код «работает» без использования приложения? – haki

+0

@haki Обновлен ответ. –

+0

Спасибо за ответ @musically_ut. Могу ли я настроить двустороннюю привязку с родительским типом, используя этот метод? или я должен определить атрибут и связать его с областью директив с помощью '' = "'? – haki

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