【问题标题】:Angular Directive would not update ng-modelAngular 指令不会更新 ng-model
【发布时间】:2016-03-09 13:15:13
【问题描述】:

我似乎无法在我的指令中找到更新我的 ng-model 的方法

我的指令看起来像这样

app.directive('DatepickerChanger', function () {
    return {
        restrict: 'E',
        require: 'ngModel',
        scope: {
            Model: '=',
            startDate: '=',
            endDate: '=',
        },
        templateUrl: function(elem,attrs) {
            return '/AngularJS/Directives/msDatepickerTpl.html'
        },
        link: function (scope, element, attrs, ngModel) {  
               ngModel = new Date();
        }

    }
});

我就是这样用的

 <DatepickerChanger ng-model="date" required></DatepickerChanger>

其中 date 是另一个日期对象

如果我 console.log ng-model,我可以看到它改变了它的值,但是从我调用指令的地方看不到它。任何人都知道我在做什么穿g

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-ng-model


    【解决方案1】:

    你用错了。这个 ngModel 是一个controller。您的代码应如下所示:

    link: function (scope, element, attrs, ngModel) {  
        ngModel.$setViewValue(new Date());
    }
    

    此外,该指令应称为 datepickerChanger 并在 html 中引用为 datepicker-changer

    编辑

    例如,您想在更改输入后更新 ngModel。一种方法是使用bind 函数来捕获输入字段的事件(我看不到您的模板,但我想会有一个输入):

    link: function (scope, element, attrs, ngModel) {  
        element.find('input').bind('change', function() {
           // Do something with this.value 
           ngModel.$setViewValue(newDate);
        });
    }
    

    【讨论】:

    • 我明白了。我在想。如果我没记错的话,链接的函数在指令初始化时运行。但是有没有类似控制器的东西可以在链接触发后继续运行?
    • 你可以为你的指令声明一个控制器。但是您想在输入更改后更新 ngModel 不是这样。我更新了我的答案。
    • 所以我需要使用 elemet.find 来查找输入,以便我可以附加事件处理程序?
    • 它是一个选项。给我看看你的模板,我可以给你一个真正的答案。
    • 拉斐尔·P·米兰达。我试着玩了一下,多亏了你,我让它工作了。所以谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多