首先,我想说英语不是我的母语,如果我不完全清楚的话,很抱歉。
所以,让我说,我想创建一个基本的CRUD应用程序的汽车。将有路线"/cars“与所有汽车的清单。要获得这些汽车数据,我必须调用API,它将同时向我发送关于所有汽车的所有数据,然后显示所有汽车的名称。我觉得我现在说的对吗?
我遇到的“问题”是当用户点击特定的汽车时。它应该将用户重定向到路由"cars/CAR_ID“,并显示该特定car的数据。但是如何获取这些数据呢?我的意思是,是的,我可以只进行一个API调用"/ api /car/CAR_ID",但是如果我已经在第一个api调用中使用了所有的cars,我为什么要这样做呢?我一直在寻找每一个线程,到处都是,他们总是发出另一个api调用,但这对我来说是一种浪费,我无法控制它。每个人都这么做肯定是有原因的,而我却错过了。我的意思是,另一种方法是存储第一个调用的数据,而不是进行第二个api调用,我们可以从第一个调用中获取数据。
我对web开发很陌生,所以最好是对每一个页面提出请求,而不是第一次存储一组大的数据,并在导航过程中使用它。如果是这样的话,我能对这个问题有更多的了解吗,就像问服务器一些我已经知道的东西……
发布于 2015-03-29 09:59:42
以下是我能想到的选择。
1)使用ui路由器 (我的首选选项)。下面是一个示例路径:
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});
}]
}
})
或
2)在服务中使用缓存
angular.module('carApp')
.service('Car', function Car($http) {
return {
list: function() {
return $http.get('/cars', {cache: true});
}
};
});
第一次调用Car.list()
时,它将调用web服务。随后对Car.list()
的调用将不会调用web服务。在您的控制器中,您可以调用Car.list
并找到与cars.show
路由类似的正确的car,或者向服务中添加另一个可以通过ID查找汽车的函数。
发布于 2015-03-30 09:21:37
你的部分问题有不同的答案。
我的意思是,是的,我可以只进行一个API调用"/ api /car/CAR_ID",但是如果我已经在第一个api调用中使用了所有的cars,我为什么要这样做呢?
如果您没有进行第一个api调用,会发生什么情况?我的意思是,我不能直接输入浏览器/api/car/12345
吗?让我们以堆栈溢出为例,假设我对这个问题做了书签,然后我直接打开这个页面(假设我没有缓存的数据),而不带问题列表遍历页面。在您的场景中,我将得到一个空白页,因为创建者会假设我首先访问其他页面,这是不合理的(并不总是)。对每个特定实体进行api调用,从一开始就会从这样的陷阱中保存下来,因为它不假定用户的浏览历史记录。
https://stackoverflow.com/questions/29331712
复制