3

我有这个日期选择器

http://jsfiddle.net/kevinj/TAeNF/2/

当前有这样的代码

'use strict';

angular.module('core').directive('jqdatepicker', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
         link: function (scope, element, attrs, ngModelCtrl) {
            element.datepicker({
                dateFormat: 'dd/mm/yy',
                onSelect: function (date) {
                    scope.date = date;
                    scope.$apply();
                }
            });
        }
    };
});

我正在这样使用它

<input type="text" ng-model="date" jqdatepicker />
<br/>
{{ date }}

我的问题是我想在多个地方使用它,它们可以有不同的模型,比如

model=date1,model=date2

有什么方法可以使该通用化,以便它可以在模型上运行它所附加的任何东西,而不是硬代码

scope.date = date;
4

1 回答 1

2

使用 ngModel 控制器来设置值,而不是在默认作用域指令内设置作用域变量。如果您正在更新任何范围属性并且希望使其可重用,则不应使用默认范围选项(当未提及时默认为当前范围,与范围相同:false),或者如果您需要 ngModel,则只需使用 ngModel 控制器实例。在你的情况下,3个关键的事情是: -

//Set $viewvalue property of ngModel
ngModelCtrl.$setViewValue(date);
//Update the input with the ngmodel view value or in otherwords render it.
ngModelCtrl.$render();
//Update any bindings invoking digest cycle
scope.$apply();

尝试:

datePicker.directive('jqdatepicker', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, element, attrs, ngModelCtrl) {
            element.datepicker({
                dateFormat: 'DD, d  MM, yy',
                onSelect: function (date) {
                    //Set viewvalue and apply it to update the input
                    ngModelCtrl.$setViewValue(date);
                    ngModelCtrl.$render();
                    //Update bindings
                    scope.$apply();
                }
            });
        }
    };
});

演示

于 2015-01-22T03:53:28.813 回答