[解決済み] ng-repeatでのカスタムソート機能
2022-09-12 14:09:42
質問
ユーザーが選択したオプションに応じて特定の番号を表示するタイルのセットを持っています。 私は今、表示されるどの番号でもソートを実装したいと思います。
以下のコードは、私がそれを実装した方法を示しています(親カードのスコープで値を取得/設定することによって)。 さて、orderBy関数は文字列を受け取るので、cardスコープにcurOptionValueという変数をセットして、それでソートしようとしましたが、うまくいかないようです。
そこで、問題は、どのようにカスタムのソート関数を作成するかということになります。
<div ng-controller="aggViewport" >
<div class="btn-group" >
<button ng-click="setOption(opt.name)" ng-repeat="opt in optList" class="btn active">{{opt.name}}</button>
</div>
<div id="container" iso-grid width="500px" height="500px">
<div ng-repeat="card in cards" class="item {{card.class}}" ng-controller="aggCardController">
<table width="100%">
<tr>
<td align="center">
<h4>{{card.name}}</h4>
</td>
</tr>
<tr>
<td align="center"><h2>{{getOption()}}</h2></td>
</tr>
</table>
</div>
</div>
とコントローラ.
module.controller('aggViewport',['$scope','$location',function($scope,$location) {
$scope.cards = [
{name: card1, values: {opt1: 9, opt2: 10}},
{name: card1, values: {opt1: 9, opt2: 10}}
];
$scope.option = "opt1";
$scope.setOption = function(val){
$scope.option = val;
}
}]);
module.controller('aggCardController',['$scope',function($scope){
$scope.getOption = function(){
return $scope.card.values[$scope.option];
}
}]);
どのように解決するのですか?
実は
orderBy
フィルタは文字列だけでなく関数も引数に取ることができます。例えば
orderBy
のドキュメントを参照してください。
https://docs.angularjs.org/api/ng/filter/orderBy
):
関数です。ゲッター関数です。この関数の結果は、ソートされます 演算子でソートされます。
つまり、独自の関数を書くことができるわけです。例えば、opt1とopt2の合計でカードを比較したい場合(これは作り話ですが、要は任意の関数を持つことができます)、コントローラに書くことになります。
$scope.myValueFunction = function(card) {
return card.values.opt1 + card.values.opt2;
};
と入力し、テンプレートで
ng-repeat="card in cards | orderBy:myValueFunction"
もう一つ注目すべきは
orderBy
の一例であることです。
AngularJSのフィルター
の一例ですので、非常に特殊な順序付けが必要な場合は、独自のフィルタを書くことができます(ただし
orderBy
で十分だと思います)。
関連
-
[解決済み] Angular ng-repeat エラー "リピータ内の重複は許可されません。"
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
[解決済み] AngularJSのng-repeatは、空のリストのケースを処理します。
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] AngularJSとHandlebars - 両方必要なのかどうか
-
[解決済み] AngularJSのng-repeatでキーと値を反復処理する方法は?
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング
-
[解決済み] ng-repeat内のng-click関数にパラメータを追加しても、うまくいかないようです。
-
[解決済み] ネストしたng-repeatの中で2つの$index値を渡す
-
[解決済み】ng-repeatが終了したときに関数を呼び出す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】angularのonLoadとng-initの違いについて
-
[解決済み] AngularJSのグローバル変数
-
[解決済み] AngularJSのng-showとフェードアニメーション
-
[解決済み] ReferenceError: Angularは定義されていません。
-
[解決済み] ajaxリクエスト時にAngularjsのローディング画面が表示される。
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] どのようにangularJSでrouteProviderとlocationProviderを設定するのですか?
-
[解決済み] controllerAs "プロパティを使用する理由は何ですか?
-
angularでのng-repeatとtrack by
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較