2016-03-09 5 views
1

я не могу найти способ, чтобы обновить свои нг-модель в моей директивеУгловая Директива не обновит нг-модель

Моей директива выглядит следующим образом

app.directive('DatepickerChanger', function() { 
    return { 
     restrict: 'E', 
     require: 'ngModel', 
     scope: { 
      Model: '=', 
      startDate: '=', 
      endDate: '=', 
     }, 
     templateUrl: function(elem,attrs) { 
      return '/AngularJS/Directives/msDatepickerTpl.html' 
     }, 
     link: function (scope, element, attrs, ngModel) { 
       ngModel = new Date(); 
     } 

    } 
}); 

И я использовать его как это

<DatepickerChanger ng-model="date" required></DatepickerChanger> 

Где дата является другой датой объекта

Если я console.log в нг-модель, я могу видеть, что я t меняет значение, но не видит его с того места, где я называю директиву. кто-нибудь понял, что им делать worng

ответ

1

Вы используете его неправильно. Этот ngModel является controller. Ваш код должен выглядеть следующим образом:

link: function (scope, element, attrs, ngModel) { 
    ngModel.$setViewValue(new Date()); 
} 

Кроме того, директива должна называться datepickerChanger и ссылка в HTML, как datepicker-changer

EDIT:

Вы хотите обновить ngModel после изменения входа , например. Один из способов сделать это является использование функции bind для захвата событий поля ввода (я не могу видеть шаблон, но я думаю, что будет иметь один вход):

link: function (scope, element, attrs, ngModel) { 
    element.find('input').bind('change', function() { 
     // Do something with this.value 
     ngModel.$setViewValue(newDate); 
    }); 
} 
+0

я вижу. мне любопытно. Функция link запускается, когда директива является init, если я не ошибаюсь. Но разве есть что-то вроде контроллера, который может продолжать работать после того, как связь была запущена? – DaCh

+0

Вы можете объявить контроллер для своей директивы. Но вы хотите обновить ngModel после внесения изменений в ваш ввод, это не так. Я обновил свой ответ. –

+0

Так что мне нужно использовать elemet.find, чтобы найти вход, чтобы я мог прикрепить обработчик событий? – DaCh