在Angular2中绑定和提供之间的区别

时间:2016-05-02 18:49:16

标签: angular angular2-routing

我正忙着学习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 })
]);

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

provide函数只是一个调用Provider类的构造函数的包装器:

provide(token, { ... });

与:

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

bind利用ProviderBuilder帮助程序类来构建提供程序。虽然不推荐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: ... });