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