ng-repeat 配列を使用してルートを決定すると、アプリが間違ったページにルーティングされるという angularjs アプリに問題があります。
データは次のようになり、個人コントローラーでアクセスされます。
[
{
"name":"AJ lastname",
"img_name":"AJ_lastname",
"location":"Baltimore, Maryland",
"info":"stuff"
},
{
"name":"Albert lastname",
"img_name":"Albert_lastname",
"location":"Boston, Massachusetts",
"info":"stuff"
} // ... more data
]
html: (アンカー タグは、配列内のインデックスに基づいて人にリンクします (問題を解決するために変更する必要があると思われますが、よくわかりません)
<ul class="main-list">
<li class="list-item fade" ng-repeat="student in students | filter:filter">
<a href="/#person/{{$index}}">
<img class="portrait listimg" ng-src="/images/{{student.img_name}}.jpg" alt="portrait of {{student.name}}">
<h2>{{student.name}}</h2>
<h4>{{student.location}}</h4>
</a>
</li>
</ul>
angular からのルーティング: (「/person/:itemId」を含むルートは、特定のユーザーに固有のページにルーティングされ、配列内のインデックスによって ID が決定されます)
app.config(function ($routeProvider, $httpProvider) {
$routeProvider
.when('/list', {
templateUrl: './js/templates/list.html',
controller: 'ListController'
})
.when('/person/:itemId', {
templateUrl: './js/templates/person.html',
controller: 'PersonController'
})
.otherwise('/list');
});
動的ページのコントローラーは次のとおりです。元の配列では完全に機能しますが、配列を並べ替えようとすると、インデックスが正しい学生に対応しなくなります。
app.controller('PersonController', function ($scope, $http, $routeParams) {
$scope.person = 'Someone\'s name';
$http.get('../js/students.json').success(function (data) {
$scope.allStudents = data;
$scope.studentId = $routeParams.itemId;
$scope.student = data[$scope.studentId];
});
したがって、機能上の問題は、インデックスが大きなデータ配列の最初の学生に適用されることです。完全に機能しているように見え、正しいデータがページに入力されますが、html/text 入力を使用してリストをフィルタリングすると、元のインデックスが html 側で更新され、元の配列に対応しません。したがって、ルーティングはそれらを間違ったページに送信します。
フィルタリングされたリストでもルーティングを機能させるにはどうすればよいですか?