Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个服务注入另一个服务时,将angularjs服务转换为Angular2服务_Angularjs_Angular - Fatal编程技术网

当一个服务注入另一个服务时,将angularjs服务转换为Angular2服务

当一个服务注入另一个服务时,将angularjs服务转换为Angular2服务,angularjs,angular,Angularjs,Angular,我看到一个服务(BService)注入另一个服务(AService)的代码: AService.AFactory.$inject在做什么?我们为什么需要一家工厂?我可以把工厂搬走吗 我想把上面的服务转换成下面的angular 2服务。我说得对吗 import { Injectable } from '@angular/core'; import { BService } from './b.service' @Injectable() export class

我看到一个服务(BService)注入另一个服务(AService)的代码:

  • AService.AFactory.$inject
    在做什么?我们为什么需要一家工厂?我可以把工厂搬走吗

  • 我想把上面的服务转换成下面的angular 2服务。我说得对吗

        import { Injectable } from '@angular/core';
        import { BService } from './b.service'
    
        @Injectable()
        export class AService {
    
            constructor(private BService: BService) {
    
            }
    
    
        }
    
        angular.module('test').service('AService', AService);
    
  • 如所述:
  • 要允许缩微器重命名函数参数并仍然能够注入正确的服务,需要使用
    $inject
    属性对函数进行注释。
    $inject
    属性是要注入的服务名称数组

    因此,代码也可以写成:

    angular.module('test').service('AService', ['BService', function(bService) {
      // AService logic goes here,
      // injected BService may be used under bService variable
      ...
    }]);
    
    您的代码显示的代码与使用新的JS类和静态方法实现的代码完全相同。
    AFactory
    ,它通过其类传递给
    test
    模块:
    AService.AFactory

    2.您的代码正确,但最后一行是多余的。下面是一个关于依赖项注入的示例。参见
    src/app/heros/hero.service.ts上的服务示例:
    :

    然后,需要从组件或模块“提供”服务(上面的src/app/heros/heros.component.ts):

    您的ng2代码可以重写为: //a.service.ts

    import { Injectable } from '@angular/core';
    import { BService } from './b.service'
    
    @Injectable()
    export class AService {
    
        constructor(private bService: BService) {
    
        }
    }
    
    并在任何模块中注册:

    import { NgModule }      from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { AppComponent }  from './app.component';
    import { AService }  from ''./a.service'';
    
    @NgModule({
      imports: [
        BrowserModule
      ],
      declarations: [
        AppComponent,
        /* . . . */
      ],
      providers: [ AService ],
      bootstrap: [ AppComponent ]
    })
    export class AppModule { }
    

    AService.AFactory是反模式的。这个案子需要解释一下。如果您需要在A1和A2应用程序中同时使用此文件,这是一件事。另一件事是,当您将其转换为A2时,不需要在A1中使用它。
    import { Component }          from '@angular/core';
    
    import { HeroService }        from './hero.service';
    
    @Component({
      selector: 'my-heroes',
      providers: [ HeroService ],
      template: `
        <h2>Heroes</h2>
        <hero-list></hero-list>
      `
    })
    export class HeroesComponent { }
    
    // imports here
    
    @NgModule({
      imports: [
        BrowserModule
      ],
      declarations: [
        AppComponent,
        CarComponent,
        HeroesComponent,
        /* . . . */
      ],
      providers: [
        UserService,
        { provide: APP_CONFIG, useValue: HERO_DI_CONFIG }
      ],
      bootstrap: [ AppComponent ]
    })
    export class AppModule { }
    
    import { Injectable } from '@angular/core';
    import { BService } from './b.service'
    
    @Injectable()
    export class AService {
    
        constructor(private bService: BService) {
    
        }
    }
    
    import { NgModule }      from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { AppComponent }  from './app.component';
    import { AService }  from ''./a.service'';
    
    @NgModule({
      imports: [
        BrowserModule
      ],
      declarations: [
        AppComponent,
        /* . . . */
      ],
      providers: [ AService ],
      bootstrap: [ AppComponent ]
    })
    export class AppModule { }