0

私は非常に簡単な作業をすべきです。私は、指定されたパラメータに基づいて角を描くドロップダウンメニューをソートしたい。簡単にする必要があります。変数でAngularJSのリストをフィルタリングする方法

は、私が戻っていくつかのデータので、同じようにDataServiceに電話をかける:

"success" : true, 
    "data" : { 
     "this_status" : [{ 
       "DefNo" : "111*A", 
       "Com" : "111", 
}, { 
       "DefNo" : "222*B", 
       "Com" : "222", 
}, { 
       "DefNo" : "333*C", 
       "Com" : "333", 
} 
]; 
     "this_info" : [{ 
       "Req" : "MUST", 
       "DefCom" : "111", 
}, { 
       "Req" : "NoMUST", 
       "DefCom" : "222" 
}, { 
       "Req" : "MUST", 
       "DefCom" : "333" 
}]} 

私の仕事は、関連MUST値を持つすべてのDefCom値でリストを作ることです。ドロップダウンの中で「必須」である「必要」を持つ「DefCom」の番号を列挙する必要があります。

angular.module('MyAPI.services', []) 
    .factory('MyAPIservice', function($http) { 
    var MyAPI = {}; 
    MyAPI.getDefCom = function() { 
     return $http({ 
      method: 'GET', 
      url: '/thisis/mylink/' 
     }); 
    }; 

    return invoiceheaderAPI; 
}); 

これは私のために働く:私の例では、私のドロップダウンが私のコントローラでは値111と333

を持っているでしょうので、私は、コール

私はこの工場を持っている
$scope.getDefCom = function(){ 
     MyAPIservice.getDefCom().success(function(response){ 
      $scope.info = response.data.this_info; 
      $scope.infoList = $scope.info; 
     }); 
     } 

を実行します最初のイニシアチブは、DefComの番号を表示するドロップダウンを行います。しかし、次にそれらをフィルタリングする必要があります。

$scope.require = MUSTこの例では、私のテンプレートインサイド

<option ng-repeat="option in DefComList" value="{{option.DefCom}}">{{option.DefCom}} </option> 

私はそうのようなフィルタをやってみました:

ng-repeat="option in DefComList | filter: {Req: $scope.require}" 

しかしもっと読めば、私はあなたに$スコープ変数を挿入することができます何かを見つけることができませんでしたフィルタ。ほとんどの提案は、独自のフィルタを作成する方向に傾いていました。私はangular.forEachを使ってこれを行いました。私のフィルタは以下の通りです:しかし、私のカスタムフィルタは$ scope.getDefCom関数から$ scope.infoの結果を取得する前に実行している

$scope.filterDefs = function($scope) { 
     var clrreturn = false; 
     angular.forEach($scope.info, function(value, key) { 
      if (value.DefCom == $scope.require) 
       clrreturn = true; 

     }); 
     return clrreturn; 
    }; 

。これは$ scope.infoの準備が整う前にError: undefined is not an object (evaluating '$scope.info')を投げています。私はこれが約束と関係していることを知っているので、延期された約束を書こうとしました。しかし、これはうまくいきませんでした。これは非常に単純な作業でなければならないと思われ、私は自分自身にとってより困難なものになる可能性があるため、私は不満を感じました。

答えて

2

私はあなたがそれを考えているかもしれないと感じます。私はあなたが何をしたいのかを理解していた場合、あなたはあなたのフィルタに必要な必要があるすべては次のとおりです。

ng-repeat="option in DefComList | filter: require : true" 

注「MUST」の検索などの正確なマッチングのための真も「noMUST」と一致します。 https://jsfiddle.net/nqya24r4/

また

あなたは、具体的にのみ必須プロパティを検索したい場合は、文字列の代わりにオブジェクトを使用してフィルタリングすることができます:ここでは

は、私はあなたのために一緒に入れ、迅速フィドルです。これを実証する別のフィドルがあります: https://jsfiddle.net/t3bw5L5d/2/

私はこれが役立つことを望みます。

+0

ありがとうございました!これは完全に機能します。私は間違いなくそれを思っていましたが、これはカスタムフィルタを書くよりも簡単です。 – jenryb

+0

問題ありません、喜んで助けてください! – anierzad

+0

'ng-options'では、この[jsfiddle](https://jsfiddle.net/awolf2904/0e5wfes3/)のようにすることもできます。 – AWolf

関連する問題