2017-03-03 2 views
1

私は基本的にすべて同じものを使用している3つのコンポーネントDataServiceを持っています。同じデータのためではなく、全く同じ方法とパターンのためです:角2ルートを変更するときにサービスインスタンスを維持する

@Component({ 
    templateUrl: './data-list-1.html', 
}) 
export class DataOne { 
    constructor(private dataService:DataService) { 
    } 
} 

@Component({ 
    templateUrl: './data-list-2.html', 
}) 
export class DataTwo { 
    constructor(private dataService:DataService) { 
    } 
} 

@Component({ 
    templateUrl: './data-list-3.html', 
}) 
export class DataThree { 
    constructor(private dataService:DataService) { 
    } 
} 

私はルート経由でコンポーネントを切り替えることができます。したがって、1つの質問は、どのようにコンポーネント内の異なるDataServicesの状態を保持することができるかということです。彼らは自分のデータと、それらすべてが自分のインスタンスを持っているのDataServiceの同じパターンを持っているものの、今

@Component({ 
    templateUrl: './data-list-1.html', 
}) 
export class DataOne { 
    constructor() { 
     this.dataService = new DataService(); 
    } 
} 

@Component({ 
    templateUrl: './data-list-2.html', 
}) 
export class DataTwo { 
    constructor() { 
     this.dataService = new DataService(); 
    } 
} 

@Component({ 
    templateUrl: './data-list-3.html', 
}) 
export class DataThree { 
    constructor() { 
     this.dataService = new DataService(); 
    } 
} 

:それぞれが異なるデータを保持しているので、私の知る限りでは、それは、DataServiceの異なるインスタンスが必要です。しかし、今のところ一つの問題は解決されていません。ルートを変更したときにDataServiceのインスタンスを保持するにはどうすればよいですか?

+1

':各コンポーネントと、それは子供たちがサービスのそこに自身のインスタンスを取得していますが、あなたがそうのようなコンポーネントレベルのサービスを提供したいと思うように

@NgModule({ imports: [AppRoutingModule, BrowserModule, FormsModule, HttpModule, ReactiveFormsModule], // module dependencies declarations: [], // components and directives bootstrap: [AppComponent], // root component schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [DataService] }) export class AppModule { } 

は、サービスを指定するにはDataService'?ルートを変更したときにルータによって追加されたり削除されたりしたコンポーネントにサービスを提供すると、そのサービスインスタンスも破棄されて再作成されます。親コンポーネントで提供する必要がありますが、ルーティングされたコンポーネントが同じ親に追加されると衝突します。 –

+0

@GünterZöchbauerすべてのコンポーネントは同じモジュールに属します。それがDataServiceを提供する場所です。 –

+0

モジュールで提供すると、遅延ロードされたモジュールを除く別のインスタンスを持つことができず、状態は失われません。 –

答えて

1

DataServiceは、各コンポーネントではなくAppModuleレベルで指定する必要があります。あなたが提供を行う

@Component({ 
    selector: "some", 
    templateUrl: "./some.component.html", 
    providers: [DataService] 
}) 
export class SomeComponent {} 
+0

これは明らかです。すべてのコンポーネントは同じモジュールに属します。それがDataServiceを提供する場所です。 –

+0

コンポーネントに再提供していますか?そうでない場合は、すべてのコンポーネントがサービスへの同じ参照を取得する必要があります。 –

+0

はい、私は同じ参照をしたくありません。それぞれには独自のインスタンスが必要です。 –

関連する問題