1

我有一个应用程序,我正在利用路线来加载两个不同的视图。

第一条路线#/是主列表视图。每次都这样。

我的第二条路线是#/view/:id在单击列表项时加载我的第二个视图。

视图是基于 id 的数据驱动的,所有这些都需要$http通过service我创建的一个请求。

是否有可能当我离开#/view/:id路线时,它会完全卸载该视图并在我回来时重新加载它?

或者

如何在服务中重置承诺,以便下次加载视图时,它将请求新数据?

4

2 回答 2

2

这些不是相互排斥的问题。路由ngView在每次加载时都会破坏视图、范围和控制器,因此控制器和范围历史不会在路由之间保留。否则,浏览器中的内存负载会很高;相反,我们可以使用服务来保存我们需要跨所有路由的状态。

$httpcache除非启用该选项,否则每次调用请求时都会刷新请求。按设计工作不需要任何工作:

.factory( 'dataService', function( $http ) {
  return function dataServiceFn ( id ) {
    return $http.get( '/myapi', { params: { id: id } } );
  };
});

当您的数据服务被调用时(例如dataService( $routeParams.id );),将返回一个新的承诺。

这只是一个非常简单的案例的示例服务结构,但只要$http在每次服务调用时调用都是新鲜的,你就会得到一个新的承诺,保证每次都是新鲜的数据。

于 2013-04-04T23:55:29.873 回答
1

当你离开另一个控制器时,Angular 会卸载控制器。如果需要在不同视图之间存储数据,则应将其存储在服务中(控制器更改时不会卸载)或准备每次加载视图时发出 $http 请求。

于 2013-04-04T23:54:53.180 回答