2017-01-17 1 views
1

Я использую AngularJS с this bootstrap-datepicker plugin:самозагрузки-DatePicker не обновляет AngularJS модели при выборе даты

Datepicker для Bootstrap v1.6.4 (https://github.com/eternicode/bootstrap-datepicker)

Copyright 2012 Stefan Petre

улучшения, Andrew Rowls

У меня он связан следующим образом:

<input type="text" data-provide="datepicker" ng-model="obj.FirstDate" /> 

Я получаю значения на входах с использованием ng-model.

Когда я ввожу дату в этой области с помощью клавиатуры все работает нормально, но когда я нажимаю на поле и выберите дату из Datepicker:

  • модель не обновляется,
  • поле не считается грязным (нет ng-dirty класс).

Есть ли способ рассчитать Угловое обновление значения obj.FirstDate при использовании Datepicker? Например, чтобы прикрепить его к событию? Или любой другой способ, которым это будет работать?

У меня есть несколько таких полей, поэтому я не хочу писать сценарий, который прикрепляется к полю, используя его id. Любая помощь оценивается.

ответ

1

После долгого времени борется с этим я вынужден был использовать ниже код, чтобы установить каждый из моих экземпляров Datepicker сразу:

function fixDatepickerTriggerChange() { 
    $(document).ready(function() { 
     $('[data-provide="datepicker"]').datepicker().on('changeDate', function (e) { 
      angular.element($(this)).triggerHandler('input'); 
     }); 
    }); 
} 

И запустить его изнутри angular.controller.

Основано на этом ответе: https://stackoverflow.com/a/23850753/1813219.

0

Не зная еще, моя догадка:

... если вы измените любую модель за пределами углового контекста, то необходимо сообщить Угловые изменения, вызвав $ применить() вручную , Это как сказать Угловое, что вы меняете некоторые модели, и должен стрелять в наблюдателей, чтобы ваши изменения распространялись правильно.

Источник: https://www.sitepoint.com/understanding-angulars-apply-digest/

Вот директива для этого конкретного DatePicker: https://github.com/fkammer/ng-eternicode-datepicker

+0

Но как связать это с Datepicker, так как Angular, похоже, не знает, что значение введено в 'input'? –

+0

Эй, извините, может быть, этот ответ был более запутанным, чем помогающим. Возможно, лучший конец для начала работы над этими вопросами: https://github.com/fkammer/ng-eternicode-datepicker – maxpaj

+0

Ваш ответ не помог мне, я не смог это сделать, но нашел простое решение, см. мой ответ. –