我有一个应用程序,我正在利用路线来加载两个不同的视图。
第一条路线#/
是主列表视图。每次都这样。
我的第二条路线是#/view/:id
在单击列表项时加载我的第二个视图。
视图是基于 id 的数据驱动的,所有这些都需要$http
通过service
我创建的一个请求。
是否有可能当我离开#/view/:id
路线时,它会完全卸载该视图并在我回来时重新加载它?
或者
如何在服务中重置承诺,以便下次加载视图时,它将请求新数据?
我有一个应用程序,我正在利用路线来加载两个不同的视图。
第一条路线#/
是主列表视图。每次都这样。
我的第二条路线是#/view/:id
在单击列表项时加载我的第二个视图。
视图是基于 id 的数据驱动的,所有这些都需要$http
通过service
我创建的一个请求。
是否有可能当我离开#/view/:id
路线时,它会完全卸载该视图并在我回来时重新加载它?
或者
如何在服务中重置承诺,以便下次加载视图时,它将请求新数据?
这些不是相互排斥的问题。路由ngView
在每次加载时都会破坏视图、范围和控制器,因此控制器和范围历史不会在路由之间保留。否则,浏览器中的内存负载会很高;相反,我们可以使用服务来保存我们需要跨所有路由的状态。
$http
cache
除非启用该选项,否则每次调用请求时都会刷新请求。按设计工作不需要任何工作:
.factory( 'dataService', function( $http ) {
return function dataServiceFn ( id ) {
return $http.get( '/myapi', { params: { id: id } } );
};
});
当您的数据服务被调用时(例如dataService( $routeParams.id );
),将返回一个新的承诺。
这只是一个非常简单的案例的示例服务结构,但只要$http
在每次服务调用时调用都是新鲜的,你就会得到一个新的承诺,保证每次都是新鲜的数据。
当你离开另一个控制器时,Angular 会卸载控制器。如果需要在不同视图之间存储数据,则应将其存储在服务中(控制器更改时不会卸载)或准备每次加载视图时发出 $http 请求。