View仅在Angular中第一次有效

时间:2013-04-04 23:36:44

标签: javascript angularjs

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

第一条路线#/是主要的列表视图。每次都有效。

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

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

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

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

2 个答案:

答案 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请求。