如果我保持排序顺序不变,使用 routeParams.id 从我的 scope.data 对象中提取正确的对象就像一个魅力。一旦顺序发生变化,routeParams.id 就会发生变化,并且与 $scope.data 中对象的顺序不匹配。
$scope.cars = {
[ {"make":"koenigsegg", "model":"agera"}, { "make":"pagani", "model":"huayra"},
{"make":noble, "model":"m600"}, {"make":"bugatti", "model":"veyron"} ]
}
// car list page
<li ng-repeat="(id, car) in cars">
<a href="#/{{id}}>{{car.model}}</a>
</li>
// Get data for individual car based on URL
// This is the key piece I'm having trouble with
controller.myCtrl = function($scope, $routeParams) {
$scope.car = $scope.cars[$routeParams.id];
};
// specific car page
<p>{{car.make}}: {{car.model}}</p>
因此,单击 id 为 0 的“Agera”将打开 /#/0,并且绑定将对应于 $scope.cars[0],显示 Agera 的数据。但是,如果排序顺序更改为“制造”,将布加迪放在首位,现在如果您单击“威龙”链接,将再次传递 0 的 id,但由于数据对象没有更改,0 仍然映射到“阿格拉。”
理想情况下,我只想使用我自己的 $routeParams 以便 URL 更明确:
$routeProvider.when('/:make/:model, { ... });
<a href="#/{{car.make}}/{{car.model}}">{{car.model}}</a>
但是现在我无法告诉我的数据数组使用哪个汽车对象。那么如何在不使用数组订单 ID 的情况下使用 $routeParams 连接到我的汽车数组中的正确“汽车”对象?
或者我怎样才能将 id 固定到它们的对象上,以便它们不附加到排序顺序?
== 编辑 ==
好的,我已经更改了我的范围以显式调用对象中的每个项目:
$scope.car = { make: routeParams.make, model: routeParams.model, ... };
所以这行得通。虽然对于大物体来说似乎非常低效。另外,如果该数据不在 URL 中,则它不起作用。有没有更好的办法?