2016-03-09 99 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