Ответ 1
Я решил это, используя: ng-change="myChangeFunction()"
.
У меня есть ng-repeat с каждой строкой, имеющей несколько UI-Bootstrap Datepickers. Я пытаюсь вызвать функцию в моем контроллере, когда выбрана дата, и сборщик закрывается. Я попытался использовать UI-Event для захвата события размытия, но модель не обновлялась при вызове. Мой вопрос: как я могу получить выбранную дату, когда сборщик закрывается? Могу ли я сделать что-то вроде ui-event="{ blur : 'myBlurFunction( $event, this.text)' }
, или есть другой способ получить данные с событием onClose?
<li ng-repeat="....">
<div ng-click="openEditStartCal($event, ticket)">
<input ui-event="{ blur : 'blurredStartDate( $event, ticket, this.text)' }"
type="text"
starting-day="2"
show-button-bar="false"
show-weeks="false"
class="form-control addTicketDateInput"
datepicker-popup="dd MMM"
ng-model="ticket.StartDate"
is-open="startEditTicketOpened && currentTicketUpdating == ticket.TicketId"
min-date="{{today()}}"
max-date="'2015-06-22'"
datepicker-options="dateOptions"
date-disabled="disabled(date, mode)"
ng-required="true" close-text="Close" />
</div>
Я решил это, используя: ng-change="myChangeFunction()"
.
Это возможно с помощью
ng-change
:
html/jsp file
<input type="text"
id="StartDate"
name="StartDate"
class="form-control input-sm"
uib-datepicker-popup="{{format}}"
ng-model="StartDateVal"
is-open="status.opened"
min-date="min"
max-date="max"
datepicker-options="dateOptions"
date-disabled="disabled(date, mode)"
ng-required="true"
close-text="Close"
readonly="true"
ng-change="select(StartDateVal)" />
.js Контроллер
$scope.select = function(date) {
// here you will get updated date
};
Вы можете поместить $watch в свой контроллер для вашей переменной даты.
$scope.$watch('ticket.StartDate',function(){
var date = $scope.ticket.StartDate;
});
Я тоже занимался этим, и onChange не будет делать эту работу для меня, поэтому я пошел в ui bootstrap.js и добавил некоторые вещи. Затем я могу установить функцию, которая будет вызываться в HTML через атрибут on-close.
<input type="text" on-close="dateClosed()" ng-model="date" datepicker-popup="dd.MM.yyyy" is-open="dateOpened" ng-click="dateOpened=true" />
то вам нужно изменить ui-bootstrap.js на
.directive('datepickerPopup' ... function(...) ... return { ...
scope: { ... , onClose: '&' }
есть 3 варианта, как закрыть выбор выбора выбора, щелкнуть в другом месте или сделать кнопку. вы можете легко найти его, его единственное место, где isOpen установлено на false
scope.isOpen = false;
Затем я просто вызываю функцию в тех трех местах, где я вызываю функцию из атрибута
scope.onClosing = function () {
if (angular.isDefined(attrs.onClose))
scope.onClose();
}
Если вы хотите, чтобы ui-bootstrap.js PM меня, я сделал это только в версии tpl.