gpt4 book ai didi

javascript - 如何加载整个 AngularJs 应用程序使用的数据?

转载 作者:行者123 更新时间:2023-12-03 06:33:22 24 4
gpt4 key购买 nike

在我的应用程序中,其他 Controller 使用一些数据来完成其工作。

例如,我需要用户和其他一些实体对服务器进行 REST 调用。

目前,我有一个 AppController (app.js),它加载将由所有 ng-views 的 Controller 使用的基本数据(请参阅index.html)。函数 loadUser() 和 loadRequiredEntity() 将从 REST-Calls 接收到的值存储在 indexedDb 中。

任何显示的 ng-views Controller (参见index.html中的ng-view)indexedDb读取加载的数据。

我认为这种方法存在一些主要问题:

  • AppController 是否会在 ng-view 的 Controller 尝试访问数据之前加载所有数据?
  • loadUser() 和 loadRequiredEntity() 调用服务(例如 userService),它们执行剩余调用并返回 Promise,以便 AppController 在整个数据加载之前完成,对吧?因此,ng-views 的 Controller 在存储任何值之前就开始从 indexedDb 读取数据。

如何加载其他 Controller 需要使用的基本数据?AngularJs Controller 是正确的选择吗?

index.html:

<body ng-app="app" id="appBody" ng-controller="AppController as appCtrl">
<md-content id="content" ng-view=""></md-content>
</body>

app.ts:

/// <reference path="../typings/tsd.d.ts" />
module app {
export class AppController {

static $inject = ['$log'];

private _LOG_PREFIX : string = 'AppController: ';

constructor(private $log: ng.ILogService) {
this.$log.info(this._LOG_PREFIX + 'started');
this.loadUser()
.then(this.loadRequiredEntity)
.then(this.markAsAuthenticated, this.handleLoadBasedataError);
}
...
}
}

最佳答案

访问数据:您应该将数据存储在服务中,例如UserService$http 调用只能从服务中进行。这是基于意见的,但被许多人共享,例如参见 this really popular style guide

在加载 Controller 之前加载数据:在路由器配置中,您可以定义一个resolve选项(在 Angular 默认路由器和ui-router中可用)。使用此resolve 选项在访问应用页面之前加载数据。参见ui router或在 default router

  1. 在解析中,调用 userService.load()
  2. 在每个 Controller 中,您都可以访问数据,例如:userService.getUsers()

关于javascript - 如何加载整个 AngularJs 应用程序使用的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com