是否可以同时在另一个服务中注入服务,反之亦然?

nun*_*uda 6 angularjs typescript ecmascript-6 ionic2 angular

我在一个真实的项目中有一个真实的场景,我需要2个服务来访问彼此的属性和/或方法.我不是Angular专家所以它可能吗?

我试过了,它失败了.这是我的尝试:

app.component.ts

import { Component } from '@angular/core';
import { FirstService } from './first.service';
import { SecondService } from './second.service';

@Component({
  selector: 'my-app',
  template: '<h1>Hello world!</h1>',
  providers: [FirstService, SecondService]
})
export class AppComponent {

  constructor(public firstService: FirstService, public secondService: SecondService) {
    console.log(firstService.foo);
    console.log(secondService.bar);
  }

}
Run Code Online (Sandbox Code Playgroud)

first.service.ts

import { Injectable } from '@angular/core';
import { SecondService } from './second.service';

@Injectable()
export class FirstService {

  foo: string = 'abc';

  constructor(public secondService: SecondService) {
    this.foo = this.foo + this.secondService.bar;
  }

}
Run Code Online (Sandbox Code Playgroud)

second.service.ts

import { Injectable } from '@angular/core';
import { FirstService } from './first.service';

@Injectable()
export class SecondService {

  bar: string = 'xyz';

  constructor(public firstService: FirstService) {
    this.bar = this.bar + this.firstService.foo;
  }

}
Run Code Online (Sandbox Code Playgroud)

Plunker:http://plnkr.co/edit/PQ7Uw1WHpvzPRf6yyLFd?p = preview

只是将第二个服务注入第一个服务工作正常,但是一旦我将第一个服务注入第二个服务,它就会失败并向控制台抛出错误.

那有什么不对?

工作解决方案应将以下内容打印到控制台日志:

abcxyz
xyzabc
Run Code Online (Sandbox Code Playgroud)

提前致谢!

geo*_*awg 3

AngularJS 不允许注入循环依赖。

\n\n

Mi\xc5\xa1ko Hevery,AngularJS 的作者之一,建议寻找共同元素:

\n\n
+---------+      +---------+\n|    A    |<-----|  B      |\n|         |      |  |  +-+ |\n|         |      |  +->|C| |\n|         |------+---->| | |\n|         |      |     +-+ |\n+---------+      +---------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

并将其提取到第三个服务:

\n\n
                         +---------+\n+---------+              |    B    |\n|    A    |<-------------|         |\n|         |              |         |\n|         |    +---+     |         |\n|         |--->| C |<----|         |\n|         |    +---+     +---------+\n+---------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

有关更多信息,请参阅构造函数中的循环依赖和Mi\xc5\xa1ko Hevery的依赖注入。

\n