首先,我想说英语不是我的母语,如果我不是100%明确的话,请提前表示歉意。
因此,我想为汽车创建一个基本的CRUD应用程序。 将有“/ cars”的路线列出所有车辆。 为了获得这些汽车数据,我将不得不打电话给API,它将立即向我发送所有汽车的所有数据,然后显示所有汽车名称。我想我现在是对的吗?
我遇到的“问题”是当用户点击特定的汽车时。 它应该将用户重定向到路线“cars / CAR_ID”并显示该特定车辆的数据。但是如何获取这些数据呢?我的意思是,是的,我可以做一个API调用“/ api / car / CAR_ID”,但是如果我已经在所有汽车的第一次api通话中拥有了我需要的一切,为什么我会这样做呢? 我一直在寻找每一个线程,到处都是,他们总是再打一次api电话,但这对我来说感觉像是浪费,我无法帮助它。 必须有一个理由为什么每个人都这样做,我错过了它。 我的意思是,另一种方法是存储第一个呼叫的数据,而不是进行第二次api呼叫,我们可以从第一次呼叫中获取数据。
我是网络开发的新手,所以最好是为每个页面提出请求,而不是第一次存储大量数据,并在整个导航过程中使用它。 如果是这样,我是否可以对这个主题有更多的了解,感觉就像向服务器询问我已经知道的东西......
答案 0 :(得分:1)
对你问题的一部分提出了不同的答案。
我的意思是,是的,我可以进行一次API调用" / api / car / CAR_ID",但是如果我已经拥有了所有汽车的首次api通话中我需要的一切,为什么我会这样做?
如果您没有拨打第一个api电话,会发生什么?我的意思是,我不能直接输入我的浏览器/api/car/12345
吗?
我们考虑使用stackoverflow作为一个例子,让我说我将这个问题加入书签,然后我直接打开这个页面(假设我没有缓存数据)而不通过带有问题列表的页面。在你的场景中,我会得到一个空白页面,因为创建者会假设我首先访问其他页面,这是不可思议的(并非总是如此)。为每个特定实体进行api调用会从一开始就从这样的陷阱中保存,因为它不会假设用户的浏览历史记录。
答案 1 :(得分:0)
以下是我能想到的选项。
1)使用ui-router(我的首选选项)。这是一个示例路线:
angular.module('carApp')
.config(function ($stateProvider) {
$stateProvider
.state('cars', {
url: '/cars',
templateUrl: 'app/cars/views/index.html',
controller: 'CarsCtrl',
resolve: {
cars : ['Car', function(Car) {
return Car.list();
}]
}
})
.state('cars.show', {
url: '/{carId}',
views: {
"@" : {
templateUrl: 'app/cars/views/show.html',
controller: 'CarCtrl'
}
},
resolve: { // the cars from the parent route (cars) will be injected into this route
car: ['$stateParams', 'cars', function($stateParams, cars) {
// not hitting the web service, find our car using lodash
return _.find(cars, {_id: $stateParams.carId});
}]
}
})
OR
2)在您的服务中使用缓存
angular.module('carApp')
.service('Car', function Car($http) {
return {
list: function() {
return $http.get('/cars', {cache: true});
}
};
});
第一次拨打Car.list()
时,它会调用网络服务。对Car.list()
的后续调用不会调用Web服务。在您的控制器中,您可以拨打Car.list
并找到与cars.show
路线类似的正确车辆,或者为您的服务添加另一项可以按ID查找车辆的功能。