您如何将自定义服务注入另一个自定义服务? [英] How do you inject a custom service into another custom service?

查看:38
本文介绍了您如何将自定义服务注入另一个自定义服务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即使在 bootstrap(app, [providers]) 方法中引导 FirebaseService 后,我也收到 No Provider for FirebaseService 错误.

我遵循了 Pascal 的指南用于在服务中注入服务 并且当我在 HTTP_PROVIDERS 引导的情况下注入 Http 服务时它起作用了,但是我收到 No providers for FirebaseService 改成我自己的服务后报错.

我可以通过删除 FirebaseService 的注入来单独注入这两个提供程序就好了.即使我做 contructor(@Inject(FirebaseService) firebase: FirebaseService){} 它也不会工作,但我的理解是添加 @Injectable() 装饰器应该效果一样.

login-page.ts

import {Component} from '@angular/core';从../../Services/user.service"导入{UserService};从../../services/firebase.service"导入 {FirebaseService};从'../../export'导入{用户模型};@成分({moduleId: 'app/PAGES/login-page/',选择器:'登录页面',templateUrl: '登录页面.html',styleUrls: ['login-page.css'],提供者:[UserService]})导出类 LoginPage {构造函数(私有用户服务:用户服务){}用户:用户模型 = 新用户模型();你好:string = "你有一个登录页面,先生";做东西() {控制台日志(this.user);//this.userService.createUser(this.user);}}

ma​​in.ts

import { bootstrap } from '@angular/platform-b​​rowser-dynamic';从 './app.component' 导入 { AppComponent };从 './SERVICES/firebase.service' 导入 { FirebaseService };引导程序(应用程序组件,[火力基地服务]);

用户服务

import { Injectable, Inject } from '@angular/core';从 './firebase.service' 导入 {FirebaseService};从'../export'导入{用户模型};@Injectable()导出类 UserService {构造函数(私有 firebaseService:FirebaseService){}公共创建用户(用户:用户模型):任何{控制台日志(用户);//this.firebaseService.set(user)}public getUser(用户名:字符串):任何{//return this.firebaseService.get("users/" + username);}}

FirebaseService

@Injectable()导出类 FirebaseService {公共获取(路径:字符串):任何{控制台日志(路径);}公共集(objectToSave:任何){控制台日志(objectToSave);}}

解决方案

我做了 plunk 并且它正在工作并将 firebase 服务注入到用户服务中.

main.ts

import { bootstrap } from '@angular/platform-b​​rowser-dynamic';从'./app'导入{应用};从 './firebase.service' 导入 { FirebaseService };引导程序(应用程序,[火力基地服务]);

app.ts

//我们的根应用组件从@angular/core"导入 {Component}从 './user.service' 导入 {UserService};@成分({选择器:'我的应用',提供者:[UserService],模板:`<div><h2>你好{{name}}</h2>

`,指令:[]})出口类应用{构造函数(私有用户服务:用户服务){this.userService.createUser({h: 1});this.name = 'Angular2(发布候选!)'}}

user.service.ts

import { Injectable, Inject } from '@angular/core';从 './firebase.service' 导入 {FirebaseService};从'../export'导入{用户模型};@Injectable()导出类 UserService {构造函数(私有 firebaseService:FirebaseService){}公共创建用户(用户:用户模型):任何{console.log(this.firebaseService)控制台日志(用户);//this.firebaseService.set(user)}public getUser(用户名:字符串):任何{//return this.firebaseService.get("users/" + username);}}

firebase.service.ts

从 '@angular/core' 导入 {Injectable}@Injectable()导出类 FirebaseService {公共获取(路径:字符串):任何{控制台日志(路径);}公共集(objectToSave:任何){控制台日志(objectToSave);}}

http://plnkr.co/edit/RLVT9dvfqH9W2BvE0qMG?p=preview

I'm getting a No Provider for FirebaseService error even after bootstrapping the FirebaseService in the bootstrap(app, [providers]) method.

I followed Pascal's guide for injecting a service within a service and it worked when I injected the Http service with the HTTP_PROVIDERS bootstrapped, but I receive a No providers for FirebaseService error after changing it to my own service.

I can inject both providers individually by removing the injection of the FirebaseService just fine. Even if I do contructor(@Inject(FirebaseService) firebase: FirebaseService){} it won't work, but my understanding is that adding the @Injectable() decorator should have the same effect.

login-page.ts

import {Component} from '@angular/core';
import {UserService} from '../../Services/user.service';
import {FirebaseService} from '../../services/firebase.service';
import {  UserModel } from '../../export';


@Component({
    moduleId: 'app/PAGES/login-page/',
    selector: 'login-page',
    templateUrl: 'login-page.html',
    styleUrls: ['login-page.css'],
    providers: [ UserService]
})
export class LoginPage {
    constructor(private userService: UserService) {}
    user:UserModel = new UserModel();
    hello: string = "You got yourself a login page, sir";

    dostuff() {

        console.log(this.user);
      //  this.userService.createUser(this.user);
    }
}

main.ts

import { bootstrap }    from '@angular/platform-browser-dynamic';
import { AppComponent } from './app.component';
import { FirebaseService } from './SERVICES/firebase.service';

bootstrap(AppComponent, [
     FirebaseService
]);

UserService

import { Injectable, Inject } from '@angular/core';
import {FirebaseService} from './firebase.service';
import { UserModel } from '../export';

@Injectable()
export class UserService {

    constructor(private firebaseService: FirebaseService ) {}

    public createUser(user: UserModel): any {
        console.log(user);
   //     this.firebaseService.set(user)
    }

    public getUser(username: string): any {
   //     return this.firebaseService.get("users/" + username);
    }
}

FirebaseService

@Injectable()
export class FirebaseService {

    public get(path: string): any {
      console.log(path);
    }

    public set(objectToSave: any) {
       console.log(objectToSave);
    }
}

解决方案

I made plunk and it's working and inject firebase service into users service.

main.ts

import { bootstrap }    from '@angular/platform-browser-dynamic';
import { App } from './app';
import { FirebaseService } from './firebase.service';

bootstrap(App, [
   FirebaseService
]);

app.ts

//our root app component
import {Component} from '@angular/core'
import {UserService} from './user.service';

@Component({
  selector: 'my-app',
  providers: [UserService],
  template: `
    <div>
      <h2>Hello {{name}}</h2>

    </div>
  `,
  directives: []
})
export class App {
  constructor(private userService: UserService) {
    this.userService.createUser({h: 1});
    this.name = 'Angular2 (Release Candidate!)'
  }
}

user.service.ts

import { Injectable, Inject } from '@angular/core';
import {FirebaseService} from './firebase.service';
import { UserModel } from '../export';

@Injectable()
export class UserService {

    constructor(private firebaseService: FirebaseService ) {}

    public createUser(user: UserModel): any {
      console.log(this.firebaseService)
      console.log(user);
   //     this.firebaseService.set(user)
    }

    public getUser(username: string): any {
   //     return this.firebaseService.get("users/" + username);
    }
}

firebase.service.ts

import {Injectable} from '@angular/core'
@Injectable()
export class FirebaseService {

    public get(path: string): any {
      console.log(path);
    }

    public set(objectToSave: any) {
       console.log(objectToSave);
    }
}

http://plnkr.co/edit/RLVT9dvfqH9W2BvE0qMG?p=preview

这篇关于您如何将自定义服务注入另一个自定义服务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆