Я создаю угловой webapp, перечисляя различные автомобили на боковой панели и некоторую информацию о конкретном автомобиле в информационном боксе.
Цель состоит в том, чтобы показать нужную информацию в поле при нажатии на разные автомобили.
У меня два разных массива (две конечные точки API), где первый массив отображает название машины, а другой - информацию о машине. Но я понятия не имею, как связать объекты с первичным ключом и внешним ключом, и как я должен выводить нужную информацию после нажатия на автомобиль.
app.js:
angular.module('myApp', [])
.controller('MyController', function($scope, $http) {
function fetch() {
$http({method : 'GET',url : 'http://*cars*'})
.success(function(data) {
$scope.cars = data;
});
$http({method : 'GET',url : 'http://*information*'})
.success(function(data) {
$scope.information = data;
});
}
fetch();
})
HTML:
<div id="sidebar">
<ul>
<li ng-repeat="name in cars"><a href="#">{{ name.displayName }}</a></li>
</ul>
</div>
Пока что все, что я сделал, это то, что я извлек данные и вывел автомобили на боковой панели. Но теперь я занимаюсь поиском в Интернете и пытаюсь подключить автомобили к информации с помощью циклов и функций в течение нескольких часов, но не знаю.
Да, я новичок в этом. Любая помощь была бы замечательной! благодаря
Вы можете справиться с этим с помощью ng-маршрута. Вы можете сделать что-то вроде:
В определении маршрута:
.when(/cars/:Id), {
name: 'cars',
templateUrl : 'ayourtemplate.html',
controller : 'yourCtrl'
})
В вашем html:
<div id="sidebar">
<ul>
<li ng-repeat="name in cars"><a href="cars/1515">{{ name.displayName }}</a></li>
</ul>
</div>
Идентификатор будет вашим ключевым тоу, который должен будет соответствовать правильному ключу в вашей переменной $ scope.information
Это зависит от того, какая информация содержит эти массивы. Если вы уверены, что каждый элемент соответствует другому, вы можете просто использовать $index
в html.
<li ng-repeat="name in cars">
<a href="#">{{ name.displayName }}</a>
<p>{{ information[$index] }}</p>
</li>
Однако, если элементы в массиве не упорядочены, вам придется проверять первичные ключи объектов в массивах. Предположим, что данные в массивах выглядят так:
cars:
[
{ id: "1", name: "Carrera GT" },
{ id: "2", name: "DB 11" },
... and so on
]
information:
[
{ id: "2", info: "Lorem ipsum" },
{ id: "1", info: "Dolor sit amet" },
...
]
Тогда я бы предложил использовать циклы и построить новый массив с помощью ids.
var carinfo = [];
cars.forEach(car => {
obj["id"] = car.id;
obj["name"] = car.name;
obj["info"] = ""; // Placeholder
info.forEach(c => {
if (c.id === car.id) {
obj["info"] = c.info;
}
});
carinfo.push(obj);
});
$scope.carInfo = carinfo;
Затем вы можете использовать $scope.carInfo
в html файле.
<li ng-repeat="car in carInfo">
<a href="#">{{ car.name }}</a>
<p>{{ car.info }}</p>
</li>