0

我正在使用这个示例应用程序在 ES6 JavaScript 中学习 Angular2 。具体来说,我试图从整个应用程序的根 JavaScript 文件开始绘制依赖链,即boot.js有人可以解释一下以下三行究竟导入了什么boot.js

import { CORE_PROVIDERS } from './app/core';
import { AUTH_PROVIDERS } from './app/auth';
import { POSTS_PROVIDERS } from './app/posts';

当我导航到上面 GitHub 链接中的'./app/core''./app/auth''./app/posts'目录时,这些目录中有很多嵌套文件,我不清楚..._PROVIDERS上述三个命令究竟传递给三个变量的是什么。其他人可以解释一下吗?

的完整代码boot.js是:

import './shim';
import 'rxjs/add/operator/map';
import { bootstrap } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { FORM_PROVIDERS, LocationStrategy, HashLocationStrategy } from '@angular/common';
import { HTTP_PROVIDERS } from '@angular/http';

import { AppComponent } from './app/core/components/app/app.component';
import { APP_ROUTES_PROVIDER } from './app/core/app.routes';
import { CORE_PROVIDERS } from './app/core';
import { AUTH_PROVIDERS } from './app/auth';
import { POSTS_PROVIDERS } from './app/posts';

if (ENVIRONMENT === 'production') {
  enableProdMode();
}

bootstrap(AppComponent, [
  FORM_PROVIDERS,
  HTTP_PROVIDERS,

  APP_ROUTES_PROVIDER,
  AUTH_PROVIDERS,
  POSTS_PROVIDERS,
  CORE_PROVIDERS,

  { provide: LocationStrategy, useClass: HashLocationStrategy },
  { provide: 'ENVIRONMENT', useValue: ENVIRONMENT }
]);
4

2 回答 2

1

当你有一个

import { Something } from './one/two';

它将在文件夹中查找文件Something导出的标识符。indextwo


/client/boot.js在您的情况下,当文件位于

import { CORE_PROVIDERS } from './app/core';
import { AUTH_PROVIDERS } from './app/auth';
import { POSTS_PROVIDERS } from './app/posts';

第一个查找从 导出的CORE_PROVIDERS标识符/client/app/core/index.js

import { LoggedInGuard } from './guards/logged-in.guard';
import { LoggedOutGuard } from './guards/logged-out.guard';

export const CORE_PROVIDERS = [LoggedInGuard, LoggedOutGuard];

如您所见,它只是“重新导出”其他提供者,这些提供者本身存在于其他文件中。

第一个在/client/app/core/guards/logged-in.guard.js等等。


顺便说一句,index文件的这种使用是一种很好的做法,在 Angular2 风格指南中的Create and Import Barrels下也有建议。

于 2016-07-23T00:33:32.570 回答
1

*_PROVIDERS导出是 Angular 2 的惯例,以将多个相关提供程序保持在单个常量下(AngularJS 模块的粗略对应物)。

这些不是 Angular 2 依赖项,而是应用程序依赖项。它们可以从索引文件嵌套模块一一跟踪。

于 2016-07-23T00:33:40.600 回答