2016-07-05 8 views
1

と角度JSにJSONオブジェクトのためのフィルタを適用することができません:私は、このJSONのサブトピックを持つNG-オプション

[{ 
    "id": "200", 
    "topicID": "20", 
    "name": "Support for project hosted by ncegitref1" 

}, 
{ 
    "id": "201", 
    "topicID": "20", 
    "name": "Support for project hosted by rndwww (Stash)" 
}, 
{ 
    "id": "210", 
    "topicID": "120", 
    "name": "Upload SSH key" 
}] 

と私のjavascriptのはこのように書きます:

$http.get(urlsub).success(function(response) { 
     $scope.subtopics = response; 
     console.log($scope.subtopics); 
    }); 

$scope.selectedTopic = {}; 
$scope.TopicChanged = function(topic) { 
    $scope.displayTopicDescription = true; 
    $scope.topicDesc = topic.description; 
    $scope.selectedTopic.topicID = topic.id; 
    $scope.sub = topic.id ; 
    console.log($scope.sub); 
}; 

マイコンソールサブトピックは上記のjsonを格納します。私はこのフィルタを使用すると、以下のように私のNG-オプションで

<select id="selectSubtopic" ng-model="topicsPopulate" ng-disabled="!topicsPopulate" ng-options="subtopic.name for subtopic in subtopics | filter:{topicID:sub}:true "> 
    <option value="" disabled selected>Select Subtopic</option> 
</select> 

をフィルタを使用し、私の代わりに最初の二つのドロップダウンにすべての3つのsubtopic.nameを参照してください。私は基本的に、$ scopeで送信するtopicIDに基づいてサブトピックをフィルタリングしたいと考えています。

答えて

0

厥、フィルタ検索その値が含まれている(20)と、すべてのオブジェクトでJSONは20 TOPICIDが含まれていますが、次のようなカスタムフィルタを作成することができます

JS:

angular.module('myApp', []) 
.controller('ControllerFirst',function($scope){ 
$scope.subtopics = [{ 
    "id": "200", 
    "topicID": 20, 
    "name": "Support for project hosted by ncegitref1" 

}, 
{ 
    "id": "201", 
    "topicID": 20, 
    "name": "Support for project hosted by rndwww (Stash)" 
}, 
{ 
    "id": "210", 
    "topicID": 120, 
    "name": "Upload SSH key" 
}]; 
$scope.sub= 20; 
$scope.selectedTopic = {}; 
$scope.customFilter = function(topicID) { 
    return function(subtopic) { 
     return subtopic.topicID == topicID; 
    } 
} 
}); 
0を

HTML:この例で

<div ng-controller="ControllerFirst"> 
<select id="selectSubtopic" ng-model="topicsPopulate" ng-options="subtopic.name for subtopic in subtopics | filter:customFilter(sub)"> 

    <option value="" disabled selected>Select Subtopic</option> 
</select> 
</div> 

そして、ここに私のバイオリン:https://jsfiddle.net/javierif/rk04nL90/

希望このヘルプU; D

0

ここには、解決策のplunkがあります。トピックに関連するいくつかの前提を作る必要がありました。これは、コードスニペットが定義されているか初期化されているかを示していないからです。

コードに対する主な変更は、フィルタに対するものでした。 TopicChanged()で設定されたスコープ変数($ scope.sub)に基づいてフィルタリングするのではなく、トピックの選択であると仮定したng-modelに基づいてフィルタに変更しました。

だから今、あなたのマークアップは次のようになります。AngularJSが同じ値を求めていないので、

HTML

<select ng-model="selectedTopic" ng-options="topic.description for topic in topics" ng-change="TopicChanged()"> 
    <option value="" disabled selected>Select a Topic</option> 
</select> 

<select id="selectSubtopic" ng-model="topicsPopulate" ng-disabled="!selectedTopic" ng-options="subtopic.name for subtopic in subtopics | filter: {topicID: selectedTopic.id} :true "> 
    <option value="">Select Subtopic</option> 
</select> 
+0

こんにちは、このdoes'nt作品。ドロップダウンにも "Upload SSH key"と表示されます。 –

+0

あなたが探していた行為がうまくいかない、あるいはそれが行動ではないと言っていますか? – jbrown

+0

私はあなたに鮮明な画像を教えてあげましょう。 2つのドロップダウン、トピックのドロップダウン、サブトピックのドロップダウンがあります。トピックが選択されるまで、サブトピックのドロップダウンは無効のままであり、選択トピックをng-change関数のパラメータとして送信します。この変数は、トピックトピックに属するサブトピックをフィルタするためにサブトピックドロップダウンで使用する$ scope変数を設定します。しかし、明らかに、フィルタは文字列が存在するかどうかをチェックします。つまり、id = 2000の場合はid = 2000が選択されます。 –

関連する問題