2016-10-04 32 views
0

我有很多從我的API返回的資源需要將日期字符串轉換爲Date對象,以便它們可以通過md-datepicker(Angular Material)渲染。首先,我在每個服務中都做了這個(事實上,我從每個服務調用另一個服務,將字符串轉換爲日期),但這變得很難維護。將字符串轉換爲md-datepicker的渲染日期

所以我試圖通過擴展md-datepicker指令來實現這一點,但我不知道如何修改該值 - 並且每個用法將具有不同的父控制器。

下面是我得到了什麼: app.js

.directive('customDatePicker', function(DatesService) { 
    return { 
     restrict: 'A', 
     require: 'mdDatepicker', 
     scope: { 
      date: '=' 
     }, 
     link: function(scope, element, attrs, controller, transcludeFn) {    
      // access value in scope here 
      console.log(scope); 
     } 
    } 
}) 

編輯task.html

<md-datepicker custom-date-picker date="TaskDetailCtrl.task.start_date" ng-model="TaskDetailCtrl.task.start_date"> 
</md-datepicker> 

我想通過使用分離的範圍我就能以更容易地獲得值 - 並且無論使用哪個控制器(沒有範圍選項,我都可以看到該值,但必須知道控制器的名稱)並不重要。

不幸的是,I get a Multiple Directive Resource Contention Error.

是否有這更好的解決辦法?

+0

不可能添加格式化你做TaskDetailCtrl.task.start_date =新的日期(<起始日期源>)?在你的控制器 – joyBlanks

+0

但是同樣需要重複跨多個控制器和服務。我們有任務列表,單個任務,移動/更新的任務,需要日期轉換的其他資源。 – DJC

+0

而不是'customDatePicker'作爲你的指令選擇一個名字'mdDatepicker'並且其餘的一切都保持不變,並且需要相同的檢查會發生什麼並且限制爲'E' – joyBlanks

回答

1

只是通過ATTR指令

.directive('myDate', function(){ 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, iElem, iAttrs, ngModelCtrl){ 
      ngModelCtrl.$formatters.unshift(function(modelValue){ 
       return modelValue && new Date(modelValue); 
      }); 
     } 
    }; 
})