2014-08-27 94 views
4

創建過濾器我試圖創建在角一個filter,可以對方式結合到一個指令中的數據可以被輸出,類似於json過濾器可以如何被應用到一個表達的效果。angularjs,對於一個指令

雖然我有很多麻煩,因爲它似乎定義了一個過濾器是不夠的,除了內聯表達式的任何工作。不過,我確信我以前看過它。

問題

是否有可能創建一個過濾器,以指令工作直列?喜歡這個?

<div ng-directive="Model.Target | filterName"></div> 

更新

ng-model只是一個例子。我不是在尋找現有的過濾器,我不是在尋找如何應用過濾器,我不是在尋找ng-repeat。我想要想創建一個新的過濾器,可以使用指令。

更新2

試圖做到這一點有點多,我研究了angular源代碼(line 154 of filters.js)並試圖有效仿的代碼,但我遇到了奇怪的行爲,使用此代碼。

.filter('sample', function() { 
    return function (obj) { 
     console.log("typoef: ", typeof obj); 
    } 
}); 

我試圖將其綁定到一個指令;

<div data-ng-custom-directive="Model.Tags | sample"></div> 

我的錯誤...

Uncaught TypeError: undefined is not a function

自定義指令並不是什麼特別的東西,它只是將對象給出並在將其發送到$scope.Model.Tags對象之前進行一些解析。

有人提到你不能在ng-model上設置過濾器,這對我來說很困惑。它只是ng-model,或者它是否有任何指令其他而不是ng-repeat您不能將指令應用於?我的理解是,根本沒有寫過濾器ng-model對應,雖然我沒有試圖完全做到這一點,但這個概念並不太相似。

+0

這並不完全回答這個問題。你不能在任何指令或ng模型上放置過濾器嗎? – Ciel 2014-08-27 17:38:36

+0

是的,你可以把它,例如用ng-repeat指令明顯評估的'ng-repeat'表達式,儘管按照你的示例 – PSL 2014-08-27 17:46:23

+0

好吧,把它放在ngModel上是沒有意義的。 'ng-model'只是一個例子。你知道任何其他指令的過濾器例子嗎?我想看看他們是如何製作的,所以我可以爲不同的指令製作過濾器。 – Ciel 2014-08-27 17:47:08

回答

3

問題不在於過濾器,而在於您的指令的變量(屬性)使用了什麼類型的綁定。您需要使用'='。例如:

HTML

<div ng-init="test = [1,2,3,4,5]"> 
    <div dir-a="test | limitTo:3"></div> 
</div> 

JS

.directive('dirA', function() { 
    return { 
     scope: { 
      dirA: '=' // this is important, '@' would not work 
     }, 
     link: function($scope, iElm, iAttrs, controller) { 
      console.log('$scope.dirA = ', $scope.dirA); 
     } 
    }; 
}); 

打印到控制檯"$scope.dirA = " Array [ 1, 2, 3 ]

+0

噢,我的上帝,這使得現在更有意義。我還沒有完成我想要的,但它不再給我同樣愚蠢的錯誤了!非常感謝。 – Ciel 2014-08-29 17:19:41

+0

爲了詳細闡述我正在嘗試做的事情......我有一個第三方庫,它有許多角度指令,但有很多選項可供設置。爲他們制定自定義指令__工作_,但它開始看起來非常鈍和惱人。我對角度很陌生,並且想要學習,所以我認爲嘗試做濾波器的選擇將是下一個好的選擇。主要是因爲很多選項是真/假標誌,而不是需要傳遞值的東西。 – Ciel 2014-08-29 18:17:44