Angular2 中绑定和提供的区别

Difference between bind and provide in Angular2

我正在忙于学习 Angular2,我想知道 bind()provide() 之间有什么区别。在我的应用程序中,我似乎找不到任何差异,所以我想知道差异是什么,以便更好地决定使用哪一个。目前我正在使用最新版本的 Angular2:beta17.

示例绑定:

import { bootstrap } from 'angular2/platform/browser';

import { ROUTER_PROVIDERS } from 'angular2/router'
import { LocationStrategy, HashLocationStrategy } from 'angular2/platform/common';
import { bind } from 'angular2/core';

// Main Component
import { AppComponent } from './app.component';

bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    bind(LocationStrategy).toClass(HashLocationStrategy)
]);

示例提供:

import { bootstrap } from 'angular2/platform/browser';

import { ROUTER_PROVIDERS } from 'angular2/router'
import { LocationStrategy, HashLocationStrategy } from 'angular2/platform/common';
import { provide } from 'angular2/core';

// Main Component
import { AppComponent } from './app.component';

bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    provide(LocationStrategy, { useClass: HashLocationStrategy })
]);

bind 只是 provide 的已弃用的前身,并且完全相同。

另见 https://github.com/angular/angular/blob/master/modules/@angular/core/src/di/provider.ts#L254

正如 Günter 所说,与 provide 不同,bind 已被弃用。

provide 函数只是一个调用 Provider class:

构造函数的包装器
provide(token, { ... });

等于:

new Provider(token, { ... });

bind 利用 ProviderBuilder 帮助程序 class 构建提供程序。尽管 bind 已被弃用,但 ProviderBuilder 未被弃用并且可以这样使用:

ProviderBuilder pb = new ProviderBuilder();
pb.toClass(type);
pb.toValue(value);
pb.toFactory(factory);

等于:

new Provider(token, { useClass: ... });
new Provider(token, { useValue: ... });
new Provider(token, { useFactory: ... });