우선 나는이 답변이 이전에 여러 번 게시되었음을 알고 있지만 내 작업을 할 수 없으며 여기 누군가가 도움을 줄 수 있습니다.
angular-cli beta 5를 사용하여 새 프로젝트를 생성하고 있습니다. 각도 2 rc1을 사용합니다.
ApplicationConfiguration <이라는 클래스가 있습니다.이 클래스는 애플리케이션의 각 구성 요소를 통해 하나의 인스턴스를 만들고 싶습니다.
내 main.ts에는 다음이 있습니다.
bootstrap(MyProjWebAppComponent, [ROUTER_PROVIDERS, HTTP_PROVIDERS, ApplicationConfiguration, provide(Http, {
useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions, router: Router, appConfig: ApplicationConfiguration) => new HttpServiceLayer(xhrBackend, requestOptions, router, appConfig),
deps: [XHRBackend, RequestOptions, Router, ApplicationConfiguration]
})]);
내 ApplicationConfiguration 클래스 :
@Injectable()
export class ApplicationConfiguration {
constructor() {
console.log('aaa');
}
}
그리고 내 ApplicationConfiguration을 삽입하는 방법에 대한 예제 구성 요소 :
import { ApplicationConfiguration } from '../..//services/application-configuration/application-configuration';
@Component({
moduleId: module.id,
selector: 'app-log-in',
templateUrl: 'log-in.component.html',
styleUrls: ['log-in.component.css'],
directives: [ROUTER_DIRECTIVES],
providers: [ApplicationConfiguration, LogInService]
})
export class LogInComponent implements OnInit {
constructor(private _service: LogInService, private appConfig: ApplicationConfiguration, private _router: Router) { }
}
내가 뭘 잘못하고 있는지 모르겠지만 새 페이지로 이동하여 클래스를 삽입 할 때마다 새 인스턴스가 생성되고 있음을 알 수 있습니다.
다른 정보가 필요하면 알려주세요.
이 문제에 대한 해결책은 대단히 감사합니다.
하나의 인스턴스 만 원하는 경우 클래스를 여러 번 제공해서는 안됩니다. Angular DI는 공급자 당 하나의 인스턴스를 유지합니다.
따라서 제거 ApplicationConfiguration
에서 LogInComponent
에
providers: [LogInService]
나는 왜 당신의 관습에 공장이 필요한지 모르겠습니다 HttpServiceLayer
. 이것은 동일해야합니다.
업데이트 (> = RC.5)
@NgModule({
declarations: [MyProjWebAppComponent],
bootstrap: [MyProjWebAppComponent],
imports: [BrowserModule, RouterModule, HttpModule],
providers: [
ApplicationConfiguration,
{provide Http: useClass: HttpServiceLayer})
]
});
원래 부트 스트랩 (MyProjWebAppComponent, [ROUTER_PROVIDERS, HTTP_PROVIDERS, ApplicationConfiguration, provide (Http, {useClass : HttpServiceLayer})]);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다