0

我正在尝试创建一个指令:

     return {
            restrict: 'A', // Attribute Directive
            ngModel: '^ngModel',
            scope: {
                'ngModel': '='
            },
            link: function ($scope: ng.IScope, element, attrs, ctrl) {

                var datePickerOptions = {
                    autoclose: true,
                    format: attrs.aceDatepickerFormat,
                    weekStart: attrs.aceDatepickerWeekstart
                };

                // Attach the datepicker events (must have Bootstrap.DatePicker referenced).
                element.datepicker(datePickerOptions).next().on('click', function () {
                    $(this).prev().focus();
                });

                element.click(() => {
                    ctrl.$setViewValue(new Date());
                });
            }
        };

在此示例中,当元素上发生单击事件时,我希望使用 ctrl.$setViewValue 到当前日期(这是一个测试)。

调用链接函数时,范围、元素和 atts 都正确填充,但是 ctrl 为空。

该元素带有一个带有 ng-controller 集的 div。

<div ng-controller="Controllers.FormElementsController">
    <input class="form-control date-picker" id="id-date-picker-1" type="text"
           ng-model="DatePickerValue"
           ace-datepicker-weekstart="1"
           ace-datepicker-format="dd-mm-yyyy"
           ace-datepicker="" />

</div>

为什么这里没有通过控制器?

4

1 回答 1

2

您必须使用require拉入控制器(ngModelController在您的情况下):

return {
            restrict: 'A', // Attribute Directive
            require: '^ngModel',

你把它设置为ngModel为属性名称。

文档

myPane 指令有一个值为 ^myTabs 的 require 选项。当指令使用此选项时,$compile 将抛出错误,除非找到指定的控制器。^ 前缀表示该指令在其父元素上搜索控制器(没有 ^ 前缀,该指令将仅在其自己的元素上查找控制器)。

于 2013-11-05T15:19:31.953 回答