ng-repeat
内で使用するコレクションを確認することは可能ですか?
たとえば、私のコントローラーでは、サーバーからフェッチされたデータの2つの配列がありますが、今はng-switch
を使用してそれらを切り替えています。このjsbinを確認してください--- http://jsbin.com/diyefevi/1/edit ?html、js、output
問題は、私の実際のアプリケーションのこれらのli
ビューは大きいが、非常に似ていることです。したがって、私は本当にしたいです2の代わりに1ng-repeat
を使用します。
では、Angularでng-repeat="book in if list==='adultBooks' adultBooks else childBooks"
のようなものが可能かどうか疑問に思いますか?
ありがとう!
これを試して ...
あなたのコントローラー
$scope.getDataSource=function(condition){
if(condition){ return dataSource1; }
return dataSource2;
};
あなたのHtml
ng-repeat="book in getDataSource(/*condition*/)
MVVMパターンは、ロジックをビュー(HTML)ではなく、常にコントローラーに配置することをお勧めします。ビューに「ロジック」を追加していることに気付いた場合は、おそらくそれを行うための別の「より良い」方法があります。
しかし、「fun」の場合は、これも実行できます。
ng-repeat="book in {true: adultBooks, false: childBooks}[list==='adultBooks']"
このような:
<li ng-repeat="book in {true: childBooks, false:adultBooks}[list==='childBooks']">{{book.name}
完全なサンプルは次のとおりです。
私が考えることができる最も簡単な解決策は、必要なときに他の配列を設定するスコープに新しい配列を定義することです。
このようなものは、ng-switchの必要性を排除します:
<!DOCTYPE html>
<html ng-app="test">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body ng-controller="MainCtrl">
<a href="" ng-click="toggleList()">Toggle List</a>
<h1>{{list}}</h1>
<ul>
<li ng-repeat="book in getBooks()">{{book.name}}</li>
</ul>
</body>
</html>
とjs:
var app = angular.module('test', []);
app.controller('MainCtrl', function ($scope) {
$scope.list = 'childBooks';
$scope.childBooks = [{name: 'Dodobird'}, {name: 'Catty Red Hat'}];
$scope.adultBooks = [{name: 'Little Lady'}, {name: 'Johny Doe'}];
$scope.toggleList = function () {
$scope.list = $scope.list === 'childBooks' ? 'adultBooks' : 'childBooks';
};
$scope.getBooks = function() {
if($scope.list == 'adultBooks') {
return $scope.adultBooks;
} else {
return $scope.childBooks;
}
}
});
これが jsbinコード