javascript - 无法使用服务

标签 javascript angular angular2-services

我创建了通过社交网络登录的服务, 我的问题是我在尝试使用它时遇到错误。 我的主要组件是:

import {Component, ViewEncapsulation} from '@angular/core';
import {UserData} from '../../theme/services/userData';
@Component({
  selector: 'login',
  encapsulation: ViewEncapsulation.None,
  styles: [require('./login.scss')],
  template: require('./login.html'),
})
export class Login {
  constructor(public _userData: UserData) {

  }

  login(form: string) {
    this._userData.login(form);

  }

服务:

import {Injectable} from '@angular/core';
import {AngularFire, AuthProviders} from 'angularfire2';
@Injectable()
export class UserData {
  user = {};
  isAuth = false;

  constructor(public af: AngularFire) {
    debugger;
    this.af.auth.subscribe(user => this._changeState(user));
  }

错误是:

error_handler.js:46 EXCEPTION: Uncaught (in promise): Error: Error in ./Login class Login_Host - inline template:0:0 caused by: No provider for UserData!ErrorHandler.handleError @ error_handler.js:46next @ application_ref.js:291schedulerFn @ async.js:89SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:81onError @ ng_zone.js:123onHandleError @ ng_zone_impl.js:65ZoneDelegate.handleError @ zone.js:207Zone.runGuarded @ zone.js:113_loop_1 @ zone.js:379drainMicroTaskQueue @ zone.js:386 error_handler.js:51 ORIGINAL STACKTRACE:ErrorHandler.handleError @ error_handler.js:51next @ application_ref.js:291schedulerFn @ async.js:89SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:81onError @ ng_zone.js:123onHandleError @ ng_zone_impl.js:65ZoneDelegate.handleError @ zone.js:207Zone.runGuarded @ zone.js:113_loop_1 @ zone.js:379drainMicroTaskQueue @ zone.js:386 error_handler.js:52 Error: Uncaught (in promise): Error: Error in ./Login class Login_Host - inline template:0:0 caused by: No provider for UserData!

最佳答案

错误消息说明了一切:没有 UserData 提供程序!

您需要使用 providers 数组在 app.module.ts提供 UserData 服务,像这样:

@NgModule({
    imports: [
        BrowserModule,
    ],
    declarations: [
        AppComponent
    ],
    providers: [
        UserData
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

关于javascript - 无法使用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39999305/

相关文章:

angular - @angular 或@types 中的 ‘@’ 符号后面是什么?

javascript - Angular:在 NgForm 的自定义输入组件中调用 markAsDirty()

Angular 2 animate *ngFor 列表项一个接一个地使用 RC 5 中的新动画支持

javascript - Angular2 中没有服务提供者错误,为什么我需要将其注入(inject)到它的父组件中?

javascript - 在函数之外使用 Angular var

javascript - Cordova run --debug 构建空白应用程序

javascript - 如何裁剪 canvas.toDataURL

JavaScript - 为什么这个闭包不保存参数?

Angular + firebase auth + Material =路由器崩溃