連動するSELECTタグ
2015/02/12追記
hrfmmymtさんがfilter使ったより良い方法を記事にしてくれました。
hrfmmymtさんのやり方の方が良いので合わせて読んで下さい。
追記ここまで。
作るもの
今回はCakePHPはお休みして、主にAngularJSメインで試してみます。
作るものは一つ目SELECTタグを選択したら、その内容に応じて二つ目のSELECTタグのOPTIONが変化するサンプルです。
そしてサンプルです
jsFiddleにサンプル作ったので、こちらを確認して下さい。
まずhtmlの中身の解説をすると、
<h1>AngularJSの練習</h1> <div ng-app> <-ここでアプリの宣言 <div ng-controller="mainCtrl"> <form novalidate name="myForm" > <p>Group: <select ng-model="group" <-設定されるモデルは”group" ng-options="g.name for g in groups" <-optionをgroupsモデルからループ処理で作成。 ng-change="change()"> <-内容に変更があったらchange()メソッドを実行 <option value="">-- chose group --</option> <-一番上に来る空のオプションを設定 </select> </p> <p>User: <select ng-model="user" <-設定されるモデルは”user" ng-options="u.name for u in listUsers"> <-optionをlistUsersモデルからループ処理で作成。 <option value="">-- chose user --</option> <-一番上に来る空のオプションを設定 </select> </p> </form> <pre>グループ名 : {{group.name}}</pre> <-グループ名の表示 <pre>ユーザー名 : {{user.name}}</pre> <-ユーザー名の表示 </div> </div>
続いてJS側は
//以下はそれぞれモデルでデータを格納してます。 $scope.groups $scope.group $scope.users $scope.listUsers $scope.user //以下はメソッドで、一つ目のセレクトタグに変更があった場合に実行されます。 $scope.change = function(){ $scope.listUsers = []; for(var i=0;i<$scope.users.length;i++){ //選択されたグループのidと一致しているユーザーを配列に追加していく if($scope.users[i].group_id ==$scope.group.id){ $scope.listUsers.push($scope.users[i]); } } };
<select ng-model="user" ng-options="u.name for u in listUsers | filtter:ホニャララ">
ともかく、jQueryと比べてコードは少ないし、見やすいしで良かった良かった。ではでは。
もう二年近くも経ってしまいました。
返信削除カスタムfilterでやる方法書きました。
この記事、業務でとても参考になりました。ありがとうございます。
http://qiita.com/hrfmmymt/items/af79e5e3ffacac3765e5