2

アプリのラベルを編集するディレクティブを作成する必要があります。

各カルチャ (例: en-US) は、テーブルに含まれるプロパティごとに最大 4 つのラベルを持つことができます。

 $scope.suffixes = ["DisplayName", "Description", "Hint", "Help"];


 <div class="clear" ng-repeat="label in labelModel | filter:cultureFilter">
      <select ng-options="suffix as suffix for suffix in suffixes | filter:suffixFilter(suffix, label.suffix)" ng-model="label.suffix" />

 </div>

ここに私のコントローラ関数があります:

    $scope.cultureFilter = function (label) {
        return (label.culture == $scope.labelState.culture);
    }

    $scope.suffixFilter = function (suffix, selectedValue) {

        //arguments are now : [undefined, "DisplayName"]

        return true; // :-(
    }

これまでのところ、文化に基づいて ng-repeat をフィルタリングできました。

しかし、私の ng-options では、既に使用されている文字列をフィルタリングする必要があります。しかし、現在の値を選択したままにしておく必要もあります。現在選択されている値であるため、一部の値をフィルター処理してはならないことをフィルターに伝えるにはどうすればよいですか?

編集

これで、選択した値を受け取ることができますが、サフィックスを受け取ることができなくなりました

4

1 に答える 1

4

あなたはフィルター関数を使用してほとんどそこにいますが、あなたの場合、本当に必要なのはカスタムフィルターだと思います。それらは実際に書くのは簡単です。

.filter()フィルターは、ヘルパーに登録された単なるファクトリ関数です。

気になるパラメータを取り込むものだけが必要です

//Outer factory function
function SuffixFilter(){

  //Inner function which is our filter
  return function(items, ignoredItem){
     var filteredItems = [];

     angular.forEach(items, function(item){
        //Your filtering logic may be more complex
        // than this. It's only an example
        if(item == someCriteria || item == ignoredItem){
           filteredItems.push(item);
        }
     });

     return filteredItems;
  }
}

angular.module('myModule')
   .filter('suffixFilter', SuffixFilter);

サフィックス フィルターを登録したら、関心のあるパラメーターを使用してマークアップで呼び出すことができます。残りは Angular が処理します。

<!-- Pass in the current selection to ignore -->
suffixes | suffixFilter:label.suffix

更新 -以下のコメントに基づく:

関数パラメーターは実際にはそのようには機能しません。呼び出すことができる関数に評価されることを期待しています。

技術的には、関数を返し、クロージャーを使用して目的を達成することができます。このようなもの:

<!-- In your markup -->
filter:suffixFilter(label.suffix)

//In your controller
$scope.suffixFilter = function (selectedValue) {

   //this is your actual filter here
   return function(item){

      //You have access to 'selectedValue' via
      // a closure
      return item == someCriteria || item === selectedValue;
   }
}

繰り返しますが、これは確かに可能ですが、カスタム フィルターの方が意味的にはクリーンだと思います。

于 2015-02-06T13:43:25.563 に答える