包含TimePicki的AngularJS指令

时间:2018-02-26 13:52:08

标签: javascript jquery angularjs angularjs-directive

我试图将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;
&#13;
&#13;

0 个答案:

没有答案