我很确定必须有一个优雅的解决方案来解决这个角度的模式,我只是看不到它。
问题:
- 所有数据在应用程序启动时批量加载一次。
/#/users/13
用户通过输入 URL请求特定视图(如)- 问题:数据尚未加载
服务器
我的后端服务器一次从其所有表中返回所有可用数据(它不多)作为 JSON
{users: [...], groups: [...], stuff: [...], ...}
服务
我将它包装在一个带有update()
Method 的 Angular 服务中,如果成功,它将把响应的元素放入 中$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 通常让我有些头疼,因为只有一大堆获取的数据,但我们想引用它的单个元素
所以我担心我只是错过了这种设置的“角度方式”(可能只是瞎了眼)。