2016-03-09 103 views
1

我似乎无法找到一个方法来更新我的NG-模型在我的指导角指令不会更新NG-模式

我的指令看起来像这样

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> 

凡日期是其他日期对象

如果我CONSOLE.LOG的NG-模式,我可以看到我t改变它的价值,但不能从我称之为指令的地方看到它。任何人都知道我在做什么worng

回答

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); 
    }); 
} 
+0

我看。我在想。链接的功能在指令是init时运行,如果我没有错的话。但是有没有像控制器那样可以在链接被触发后继续运行? – DaCh

+0

您可以为您的指令声明一个控制器。但是你想在你的输入发生变化之后更新ngModel。我更新了我的答案。 –

+0

所以我需要使用elemet.find来查找输入,以便我可以附加事件处理程序? – DaCh