当前位置: 首页 > 面试题库 >

如何异步引导Angular 2应用程序

傅长恨
2023-03-14
问题内容

有一篇很棒的文章,介绍如何异步引导angular1应用程序。这使我们能够在引导之前从服务器获取json。

主要代码在这里:

(function() {
    var myApplication = angular.module("myApplication", []);

    fetchData().then(bootstrapApplication);

    function fetchData() {
        var initInjector = angular.injector(["ng"]);
        var $http = initInjector.get("$http");

        return $http.get("/path/to/data.json").then(function(response) {
            myApplication.constant("config", response.data);
        }, function(errorResponse) {
            // Handle error case
        });
    }

    function bootstrapApplication() {
        angular.element(document).ready(function() {
            angular.bootstrap(document, ["myApplication"]);
        });
    }
}());

如何使用Angular 2达到相同的目的?


问题答案:

实际上,您需要在应用程序本身之外显式创建一个注入器以获取实例Http执行请求。然后,在增强应用程序时,可以将已加载的配置添加到提供程序中。

这是一个示例:

import {bootstrap} from 'angular2/platform/browser';
import {provide, Injector} from 'angular2/core';
import {HTTP_PROVIDERS, Http} from 'angular2/http';
import {AppComponent} from './app.component';
import 'rxjs/Rx';

var injector = Injector.resolveAndCreate([HTTP_PROVIDERS]);
var http = injector.get(Http);

http.get('data.json').map(res => res.json())
  .subscribe(data => {
    bootstrap(AppComponent, [
      HTTP_PROVIDERS
      provide('config', { useValue: data })
    ]);
  });

然后,您可以通过依赖项注入访问配置:

import {Component, Inject} from 'angular2/core';

@Component({
  selector: 'app',
  template: `
    <div>
      Test
    </div>
  `
})
export class AppComponent {
  constructor(@Inject('config') private config) {
    console.log(config);
  }
}

请参阅以下代码:https
://plnkr.co/edit/kUG4Ee9dHx6TiJSa2WXK
? p
= preview 。




 类似资料:
  • 问题内容: 我已升级到angular2 RC6,并希望在引导AppModule之前加载外部JSON配置文件。在RC5之前,我已经进行了这项工作,但是现在很难找到一种等效的方式来注入此数据。 这样做虽然很好,但是很难更改为与RC6一起使用。 我正在尝试以下方法,但是努力用加载的数据修改我的预定义AppModule: 问题答案: 我有同样的问题。好像您遇到了我的要点 :-) 至于RC6更新,您应该签出

  • 我有一个spring boot微服务,我们在其中调用多个服务(比如服务a和服务B)。我试图根据某些条件在多个线程上异步调用这两个服务,一旦处理完成,我想合并服务A和服务B的响应。 我知道我们可以使用@Async异步运行一个进程,并使用ExecutorService为一个服务启动多个线程。 但是我不确定如何把所有的东西放在一起。所以在这里寻找任何建议? 我知道这在上面主要是理论上解释的,但我尝试了跟

  • 当导航到带有防护装置的页面时,已或都会打印到控制台(在等待 firebase 响应的一段时间后)。但是,导航永远不会完成。另外,如果我没有登录,我会被重定向到路由。因此,我遇到的问题是 不会向用户显示请求的页面。我假设这是因为我正在使用回调,但我无法弄清楚如何做到这一点。有什么想法吗?

  • 我想实现一个netty“从”应用程序,它侦听传出的websocket连接上的请求。因此,在引导时,应用程序将: null ServerBootstrap需要本地侦听套接字 引导程序只有一个EventLoop AbstractBootstrap不能在包之外子类化,ServerBootstrap/Bootstrap是最终的 关于如何引导通道而不重复一堆现有的*引导代码,有什么建议吗?

  • 问题内容: 我很难尝试导入lodash模块。我已经使用npm + gulp设置了我的项目,并不断碰壁。我尝试过常规lodash,但也尝试过lodash-es。 lodash npm软件包:(在软件包根文件夹中有一个index.js文件) 结果是: lodash-es npm软件包:(在package根文件夹的lodash.js中具有默认输出) 结果是: gulp任务和webstorm都报告相同的问

  • 在这个Plunker中,我有一个模板: 这是组件类: 这确实有效,我确实在输出中看到了。但是我想使用管道。 因此,我希望我的模板是: 但是有一个问题。 不是数组。它是一个具有prop的对象,该属性是必需的数组。 我不能这样做: 我创建了另一个plunker,它只返回一个数组: 而且它可以与一起工作。 问题: 看看我的第一个代码,我如何使用异步管道,同时仍然解析一个对象而不是一个数组?