Angular2 DI 질문이 있습니다. 말 나는이 TestService
와 나는 같은 구성 요소 내에서이 서비스의 2 개 가지 인스턴스를 사용하고 싶습니다. 컴포넌트에 제공자를 추가하고 생성자에 2 개의 인스턴스를 추가하면 동일한 서비스 인스턴스가됩니다. 예를 들면 :
TestService
import {Injectable} from "@angular/core";
@Injectable()
export class TestService {
public id: number = Math.random();
public toString(): string {
return "Id: " + this.id;
}
}
테스트 구성 요소
import {Component, Input, OnInit} from "@angular/core";
import {TestService} from "../../services/test.service";
@Component({
providers: [TestService]
})
export class TestComponent implements OnInit {
constructor(private _testService1: TestService, private _testService2: TestService) { };
ngOnInit() {
console.log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", this._testService1.toString());
console.log("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", this._testService2.toString());
}
}
콘솔 결과
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Id: 0.24242492129168425
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB Id: 0.24242492129168425
누군가가 Angular2의 DI 메커니즘을 사용하여 동일한 구성 요소 내에 서비스의 여러 인스턴스를 주입하는 방법이 있는지 말해 줄 수 있습니까? 아니면이 특정 경우에 DI를 삭제하고 수동 생성자로 인스턴스를 수동으로 만들어야합니까?
미리 감사드립니다
호출 할 때마다 새 인스턴스를 반환하는 팩토리를 삽입 할 수 있습니다.
@NgModule({
providers: [{
provide: 'testService',
useFactory: (/* TestService deps here like `http`*/) =>
(/* params */) => new TestService(/* http */),
deps: [/* TestService deps here like `Http`*/ ]
}]
})
@Component(...)
export class TestComponent implements OnInit {
constructor(@Inject('testService') private _testServiceFactory) { };
ngOnInit() {
console.log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", this._testServiceFactory( /* params */).toString());
console.log("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", this._testServiceFactory().toString());
}
}
Plunker 예제 (버튼을 클릭 할 때 브라우저 콘솔에서 출력 확인)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다