2016-11-02 73 views
0

我有一個角指令,它看起來是這樣的:我們可以結合Angular指令和工廠的代碼嗎?

.directive('datefilter', function (dateFilter) { 
    return { 
     require: 'ngModel', 

     link: function (scope, element, attrs, ngModelController) { 
      ngModelController.$parsers.push(function (data) { 
       //convert data from view format to model format 
       return new Date(data); //converted 
      }); 

      ngModelController.$formatters.push(function (data) { 
       //convert data from model format to view format 
       return new Date(data); //converted 
      }); 
     } 
    } 
}) 

這個指令我使用的文本字段這樣

<input type="text" ng-model="someModelName" datefilter uib-datepicker-popup="{{format}}"> 

現在

我有這樣的角度濾波:

.filter('datefilterfilter', function (dateFilter) { 
     return function (value, format) { 
      return dateFilter(new Date(value), format); 
     }; 
    }); 

該過濾器,我使用這樣的:

<b> {{someModelNAme | datefilterfilter: format}} </b> 

最終既提供指導和過濾做同樣的工作,但這個指令需要ng-model,所以我不能將其應用到<b>標籤,因爲它沒有任何ng-model。有什麼辦法可以將directivefilter這兩個元素(text filed<b>標籤)都適用?

+0

要在文本框中的文本是** **大膽? – Aravind

+0

不,不管是'directive'還是'filter'都返回'new Date()'我想寫代碼一次。 –

+0

當你的指令返回'new Date()'有什麼過濾的目的? – Aravind

回答

1

您可以通過注入$filter服務中使用任何過濾器在你的指令:

.directive('datefilter', ["$filter", function ($filter) { 
    return { 
     require: 'ngModel', 

     link: function (scope, element, attrs, ngModelController) { 
      ngModelController.$parsers.push(function (data) { 
       //convert data from view format to model format 
       return $filter("datefilterfilter")(data); //converted 
      }); 

      ngModelController.$formatters.push(function (data) { 
       //convert data from model format to view format 
       return $filter("datefilterfilter")(data); //converted 
      }); 
     } 
    } 
}]) 
+0

方法是正確的,但對於'$ parsers'和'$ formatters'具有相同的操作聽起來不正確... – Icycool

+0

當然,您可以在一個函數中提取它,或者在兩個函數中執行它,但這不是OP的問題。 – devqon

相關問題