Angular UI Bootstrap datepicker不承认ng-readonly属性。 如果ng-readonly表达式为true,则文本输入字段为灰色并且无法修改,但日期选择器的日历弹出,允许修改表单字段。Angular UI Bootstrap datepicker:ng-readonly支持
到目前为止我tryed 3种方法(见http://plnkr.co/edit/KHrbbI6W1pWG5ewSsE9r?p=preview),这两者都是相当hackish的和丑陋:
在日期选择器的所有日期的禁用,如果它应该是只读的。
在HTML文件<input type="text" datepicker-popup="dd.MM.yyyy" ng-model="dt" ng-readonly="ro" date-disabled="disabled(date, mode)" />
和
在控制器$scope.$watch('ro', function(ro) { $scope.dt = new Date($scope.dt); // force datepicker div refresh }); $scope.disabled = function(date, mode) { return $scope.ro; };
。
不允许datepicker弹出div弹出。
在HTML文件<input type="text" datepicker-popup="dd.MM.yyyy" ng-model="dt" ng-readonly="ro" is-open="opened" />
和
在控制器$scope.$watch('opened', function(v1, v2, v3) { if ($scope.ro && v1) { $timeout(function() { $scope.opened = false; }); } });
。闪烁的日期选择器看起来很糟糕。
将日期选择器的文本输入替换为其他只读附加日期选择输入字段。
在HTML文件<datepicker-ro-fix datepicker-popup="dd.MM.yyyy" ng-model="dt" ng-readonly="ro" />
和
在js文件m.directive('datepickerRoFix', function() { return { restrict: 'E', require: 'ngModel', scope: { ngModel: '=', ngReadonly: '=', }, template: '<span>' + '<input ng-hide="ngReadonly" type="text" datepicker-popup="dd.MM.yyyy" ng-model="ngModel" />' + '<input ng-show="ngReadonly" type="text" readonly="true" value="{{ ngModel | date:\'dd.MM.yyyy\'}}" />' + '</span>', }; });
。这似乎是迄今为止最好的解决方案,但缺点是现在有两个输入元素而不是一个,都具有一些硬编码属性。
第一和第二方法需要我一串代码添加到每每个日期输入字段形式的控制器,第三是更难定制。
我是新来的角,应该缺少的东西。 有没有更好的方法使datepicker的输入字段真的只读?
为什么不显示日期为文本和隐藏输入等等它仍然可用于角度验证目的 – charlietfl
@charlietfl,它与我的第三种方法有什么不同? –
这意味着没有输入显示给用户...笑话文本和按钮 – charlietfl