我是 Angular 的新手,并且在让 datepicker 指令正常工作时遇到了问题。http://jsfiddle.net/jGU95/9/上的 jsFiddle说明了一些我无法克服的问题。
表格非常简单:
<div ng-app="myApp" ng-controller="Ctrl">
<br>
Date 1
<input type="text" datepicker1={{pickeropts}} ng-model="date1" /> {{date1 | date:MM/dd/yyyy}}
<br>
Date 2
<input type="text" datepicker2={{pickeropts}} ng-model="date2" /> {{date2 | date:MM/dd/yyyy}}
<br>
Date 3
<input type="text" datepicker1 data-date-format="{{format}}" ng-model="date3" /> {{date3 | date:MM/dd/yyyy}}
</div>
datePicker1指令的原始日期渲染格式为错误的格式,实际日期选择器与日期(即选择日期1文本字段时,datePicker启动时,都以今天的日期而不是1975年的日期启动。从日期选择器中选择日期后,控件将按预期运行,包括以正确格式显示输出日期字符串。
这是 datepicker1 指令:
.directive('datepicker1', function(){
return {
require: '?ngModel',
link: function($scope, element, attrs, controller) {
var originalRender;
var updateModel = function(ev) {
return $scope.$apply(function() {
return controller.$setViewValue(ev.date);
});
};
if (controller != null) {
originalRender = controller.$render;
controller.$render = function() {
originalRender();
return element.datepicker.ddate = controller.$viewValue;
};
}
return attrs.$observe('datepicker1', function(value) {
var options;
options = {};
if (angular.isObject(value)) {
options = value;
}
if (typeof(value) === "string" && value.length > 0) {
options = angular.fromJson(value);
}
return element.datepicker(options).on('changeDate', updateModel);
});
}
};
})
datepicker2 对日期的原始渲染也有问题,并且也忽略了指定的格式选项。这似乎是由 controller.$render 函数中 datepicker 元素的实例化引起的,它发生在 attrs.$observe 函数之前。
这是 datepicker2 指令
.directive('datepicker2', function(){
return {
require: '?ngModel',
link: function($scope, element, attrs, controller) {
var updateModel = function(ev) {
return $scope.$apply(function() {
return controller.$setViewValue(ev.date);
});
};
if (controller !== null) {
controller.$render = function() {
element.datepicker().data().datepicker.date = controller.$viewValue;
element.datepicker('setValue');
element.datepicker('update');
return controller.$viewValue;
};
}
return attrs.$observe('datepicker2', function(value) {
var options;
options = {};
if (angular.isObject(value)) {
options = value;
}
if (typeof(value) === "string" && value.length > 0) {
options = angular.fromJson(value);
}
return element.datepicker(options).on('changeDate', updateModel);
});
}
};
});
最后,日期 3 的日期选择器不起作用,因为 $scope.format 值在发送到日期选择器之前未正确插入到字符串中。
请帮我弄清楚如何解决这些问题...
史蒂夫