私は3つの問題を解決したいと思っています...
私のアプリページには、州用と郡用の1つの選択があります。私が持っている州の場合:
<select ng-model="filter.stateID" ng-options="item.stateID as item.state for item in st_option">
</select>
データ:
[
{ state="California", stateID="5"},
{ state="Arizona", stateID="3"},
{ state="Oregon", stateID="38"},
{ state="Texas", stateID="44"},
{ state="Utah", stateID="45"},
{ state="Nevada", stateID="29"}
]
私の郡の選択のために私は持っています:
<select ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
</select>
データ:
[
{ county="Orange", countyID="191", co_state_id="5"},
{ county="Multiple Counties", countyID="3178", co_state_id="3"},
{ county="Sonoma", countyID="218", co_state_id="38"},
{ county="Los Angeles", countyID="190", co_state_id="44"}
]
これは私のng-repeat
です:
<div ng-repeat="project in projects | filter:filter">
<div>
State: {{project.state}}<br>
County: {{project.county}}<br>
<span ng-hide="{{project.stateID}}"></span>
<span ng-hide="{{project.countyID}}"></span>
</div>
</div>
ご覧のとおり、状態選択でstateID
を使用し、郡選択でco_state_id
に対応する状態IDを郡データセットに設定しています。
私はいくつかのことをしたいと思います:
stateID
/co_state_id
で郡選択オプションをフィルターしますng-repeat
を最初にstateID
でフィルターし、次にcountyID
でフィルターします。また、filter.stateID
をtrue
に設定したり、文字列ではなく数字でフィルタリングしたりする方法も見当たりません。 stateIDでフィルタリングすると、いくつかのstateID
に「1」を含めることができるため、結果が混在します。
通常、投稿ごとに1つだけ質問したいのですが、これら3つを試してみます。
パート1:ng-show
にfilter.stateID
を追加します。状態の選択を解除することはできないため、angularが^ 1.3であればワンタイムバインディングを使用できます。
<select ng-show="::filter.stateID" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
パート2:{co_state_id : filter.stateID}
のフィルターを追加します
<select ng-show="::filter.stateID != null" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }">
パート:
フィルタにパターンオブジェクトを使用しています。idの値が1であるかどうかは関係ありません。
オブジェクト:パターンオブジェクトを使用して、配列に含まれるオブジェクトの特定のプロパティをフィルター処理できます。たとえば、{name: "M"、phone: "1"}述語は、「M」を含むプロパティ名と「1」を含むプロパティ電話を持つアイテムの配列を返します。特別なプロパティ名$を使用して({$: "text"}のように)、オブジェクトのプロパティまたはネストされたオブジェクトプロパティに対する一致を受け入れることができます。これは、上記の文字列との単純な部分文字列一致に相当します。文字列の前に!を付けると、述語を否定できます。たとえば、{name: "!M"}述語は、 "M"を含まないプロパティ名を持つアイテムの配列を返します。
作業スニペット
var app = angular.module('app', []);
app.controller('myController', function($scope) {
$scope.projects = [{
name: 'Project1',
state: 'CA',
stateID: '5',
county: 'Orange',
countyID: '191'
}, {
name: 'Project2',
state: 'CA',
stateID: '5',
county: 'LosAngeles',
countyID: '190'
}, {
name: 'Project3',
state: 'CA',
stateID: '5',
county: 'Orange',
countyID: '191'
}, {
name: 'Project4',
state: 'MadeUp',
stateID: '1',
county: 'MadeUp',
countyID: '190'
}];
$scope.st_option = [{
state: "California",
stateID: "5"
}, {
state: "Arizona",
stateID: "3"
}, {
state: "Oregon",
stateID: "38"
}, {
state: "Texas",
stateID: "44"
}, {
state: "Utah",
stateID: "45"
}, {
state: "Nevada",
stateID: "29"
}];
$scope.co_option = [{
county: "Orange",
countyID: "191",
co_state_id: "5"
}, {
county: "Multiple Counties",
countyID: "3178",
co_state_id: "3"
}, {
county: "Sonoma",
countyID: "218",
co_state_id: "38"
}, {
county: "Los Angeles",
countyID: "190",
co_state_id: "44"
}];
$scope.filter = {};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<div ng-app='app' ng-controller='myController'>
<select ng-model="filter.stateID"
ng-options="item.stateID as item.state for item in st_option"></select>
<select ng-show="::filter.stateID"
ng-model="filter.countyID"
ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }">
</select>
<div ng-repeat="project in projects | filter:filter">
<div>
<br>Name: {{ project.name }}
<br>State: {{project.state}}
<br>County: {{project.county}}
<br>
<span ng-hide="{{project.stateID}} "></span>
<span ng-hide="{{project.countyID}} "></span>
</div>
</div>
</div>