Angular 2로 마이 그 레이션하고 있는데 과도기 의존성 (주입 된 구성 요소간에 상태를 공유하지 않는 종속성)을 생성하기 위해 팩토리 패턴을 사용하려는 경우 서비스를 등록하는 가장 좋은 방법은 무엇입니까? 서비스를 등록하는 ng2의 방법으로 마이그레이션하려는 계획을 가진 1.5.8의 앵커각도 1.5.8에서 각도 2로 마이그레이션하는 경우 어떻게 팩토리 패턴을 사용합니까?
2 번에서 알 수 있듯이 구성 요소는 공급자 배열로 전달하여 서비스를 다시 인스턴스화 할 수 있지만이 옵션은 앵귤러 1에 존재하지 않으며 .factory
은 2 호에서 더 이상 사용되지 않습니다. 문서는 많은 사랑을주지 않기 때문에
대시 보드에서 사용자가보고있는 탭의 상태를 관리하는 TabulationService가 있습니다. y 구성 요소간에 상태를 공유하지 마십시오. 나는 주입 된 각 구성 요소에서 서비스를 다시 인스턴스화하려고합니다. 그러나 Angular 2 모범 사례가 사용을 꺼리는 것 같으면 .factory
을 사용하지 않는 것이 좋습니다.
여기는 "해킹"입니다.하지만 내 서비스에 대한 유형 힌트 및 상태 비 저장을 가져 오지만 생성 된 개체에 종속성 주입을 사용할 수 없기 때문에 마음에 들지 않습니다. 이 주입됩니다 때 나는 내 서비스의 상태를 관리 할 필요가 주입 도착하는 성분 (수동 서비스의 상태를 해제하여) 파괴 될 때 :
tab-manager.service.ts
:
import { TabManager } from './tab-manager.class';
export class TabService {
manager;
public initialize(tabs: string[], defaultTab: string) {
this.manager = new TabManager(tabs, defaultTab);
}
}
tab-manager.class.ts
:
import { includes } from 'lodash';
const mandatory = (param) => { throw new Error(`${ param } is a required field in Tab Manager!`) };
export class TabManager {
tab: string;
constructor(public tabs: string[] = mandatory(`tabs`), public defaultTab: string = mandatory('defaultTab')) {
this.checkTab(defaultTab);
this.tab = defaultTab;
}
public switchTab(tab) {
const self = this;
self.checkTab(tab);
self.tab = tab;
}
private checkTab(tab: string) {
const self = this;
if (!includes(self.tabs, tab)) {
throw new Error(`{ tab } is not a valid tab. Available tabs are ${ self.tabs.join(',') }`);
}
}
}
고마워요.하지만 그게 제가 논의하고 있던 문제를 해결하는 것은 아닙니다. Angular 1 'value'공급자는 종속성 삽입을 사용할 수 없습니다. '의 사용.value '는 적어도 .service()를 사용하여 DI를 얻었 기 때문에'.service()'를 사용하는 것과 다르지 않고 실제로 이점이 적습니다. 문제는 제 2 클래스를 가져 와야하고 각도'.service()'내에서 의사 생성자 함수로부터 새로운 것을 호출해야합니다. 이것은 두 번째로 가져온 클래스가 DI에 액세스 할 수 없기 때문에 문제가됩니다. 각도 2 설명서를 "비난"하려고 시도하지 않았습니다. ng2는 서비스를 공장 식으로 만드는 방법에 대해 분명합니다. – roonie