【发布时间】:2013-11-14 14:04:50
【问题描述】:
我很确定一定有一个优雅的解决方案来解决这个角度的模式,我只是看不到它。
问题:
- 所有数据在应用程序启动时批量加载一次。
- 用户通过输入 URL 请求特定视图(如
/#/users/13) - 问题:数据尚未加载
服务器
我的后端服务器一次返回所有表中的所有可用数据(它不多)作为 JSON
{users: [...], groups: [...], stuff: [...], ...}
服务
我使用 update() 方法将其包装在一个角度服务中,成功后会将响应的元素放入 $rootScope,因为这是整个应用程序正在处理的内容:
.success(function (data) {
$rootScope.users = data.users;
$rootScope.groups = data.groups;
...
}
一旦应用启动,就会在 mainController 中调用 update 方法。
控制器/视图
当我为某个用户创建视图时,例如/users/:id,在应用程序内导航时一切正常。到目前为止,一切顺利。
当我用一个像#/users/13这样的视图的深层链接启动应用程序时,数据还没有加载,所以控制器不能像往常一样链接数据,导致错误:
$scope.user = $scope.users[$routeParams.id];
想法
我必须解决的所有想法都以某种方式存在问题。
- 在控制器中对未定义的
$scope.users做出反应可以避免错误,但是一旦数据存在,我将如何重新加载视图? - 为依赖于服务结果承诺的路由设置
resolve部分会在每次使用路由时重新加载,即使数据已经加载(数据应该是仅在应用启动时加载) - 为每个数据部分设置服务并对每个结果使用 promise 会从服务器多次获取数据
- 为“数据已加载”设置显式标志并根据其状态更改内容对我来说似乎完全错误
- 使用 Promise 通常让我有些头疼,因为只有一大块获取的数据,但我们想引用其中的单个元素
所以恐怕我只是错过了这种设置的“角度方式”(可能只是瞎了眼)。
【问题讨论】:
-
当我使用深层链接启动应用程序时 --- 角度如何加载?
标签: javascript angularjs