我试图将TimePicki包装在AngularJS指令中。
我无法找到从options.start_time
中当前保存的值初始化ngModel
选项的方法。
如果我使用观察者,因为时间戳已经初始化已经太晚了,而且如果我使用ctrl.$modelValue
,那么该值太早,因为当该值设置为null时指令被渲染。
我唯一的另一个选择(我知道)是观察者,但我不想在每次ngModel
的值发生变化时初始化时间戳,因为我们最终会一团糟 - ngModel
的价值可能不会改变,直到用户希望选择新的时间。
下面显示的是我目前对该指令的代码。
(function () {
"use strict";
angular.module("timePicker", [])
.directive('timepicker', ["$parse", function ($parse) {
return {
restrict: 'A',
require: 'ngModel',
template: '<input type="text" />',
link: function (scope, element, attrs, ctrl) {
var ngModel = $parse(attrs.ngModel);
var options = {
on_change: function (time) {
scope.$apply(function (scope) {
ngModel.assign(scope, moment(time.value, "hh:mm A"));
});
}
}
ctrl.$formatters.push(function (value) {
if (!angular.isDefined(value)) { return null; }
return value.format("hh:mm A");
});
ctrl.$parsers.push(function (value) {
return moment(value, "hh:mm A");
});
$(element).timepicki(options);
}
};
}]);
}());
&#13;
<input id="txtTime"
type="text"
ng-model="eventEdit.event.time"
name="timepicker"
class="time_element"
readonly="readonly"
timepicker />
&#13;