2016-12-28 10 views
2

layoutcomponentには親子があります。送信時に検索コンポーネントの子コンポーネントをrouter-outletからリダイレクトしています。それは私の私がサービスを共有しているし、そこインタフェースas suggested hereであり、それが動作親から子コンポーネントを更新

onSubmit({ value }: { 
    value: Search 
}) { 
    this.sharedData.searchStr = value.Search; 

    let urlSegments = this.router.url.split('/'); 

    let lang = urlSegments[1]; 

    let url = lang + '/search'; 
    this.router.navigateByUrl(url); 


    this.searchval.reset(); 
} 

を提出します。子コンポーネントで

import { Injectable, Inject } from '@angular/core'; 
export interface ISharedModel { 
    searchStr: string; 
} 
@Injectable() 
export class SearchService { 

    sharedComponent: ISharedModel = { 
     searchStr: '' 
    }; 

    constructor() { } 
} 

私はngOnInit

ngOnInit() { 
    this.sharedData = this.sharedResource.sharedComponent; 

    this.searchval = new FormGroup({ 
     Search: new FormControl(this.sharedData.searchStr) 
    }); 
} 

を持っており、それは、リダイレクトアプリケーションにそうhtmlページに

<form (ngSubmit)="onSubmit(searchval)" [formGroup]="searchval" > 
     <input type="text" placeholder="enter search string" formControlName="Search" class="form-control"> 
     <button class="btn btn-primary">search</button> 
</form> 

を持って、このテキストボックスを埋めます。 これはすでに `mydomain.com/en/search 'にあり、親コンポーネントに検索文字列を入力すると子コンポーネントが更新されません。

どうすればよいですか?

+0

があなたの子コンポーネントに@inputデコレータを使用しようとする必要がありますか?あなたのパラメータがこの入力変更を通過すると、イベントが広がり、正常に変更を適用できるはずです – qchap

+0

私はそれを行うことができません。私が知っているように、コンポーネントのタグをどこかに持っていれば、入力パラメータを渡すことができます。しかし、私はそれを持っていません。私はルータでリダイレクトしています。私が正しくないと言ったら – gsiradze

+0

私はあなたの事をよく理解していないと思います。あなたはあなたの問題をより正確に見るためにpklrなどを公開できますか?ありがとう。 – qchap

答えて

5

あなたは、共有サービスを使用することができますが、あなたはまた、ちょうどそれをスキップして、次のことを行うことができます:あなたのChildComponentで

String Subjectを宣言:

あなたChildComponentのコンストラクタで
public static yourString: Subject<String> = new Subject<string>(); 

YourChildComponent.yourString.subscribe(res => { 
    this.searchval.patchValue({Search: res}) 
}); 

、親の場合はkeyup - 方法:

updateValue(value) { 
    YourChildComponent.yourString.next(yourUpdated value here) 
} 

EDIT:ワーキングplunker

+0

お返事ありがとうございます。あなたの答えを試しましたが、私の子コンポーネントにはreturn.next(false)はありません。 – gsiradze

+0

これは私がテストしたときにはうまくいきました....あなたの子コンポーネントに 'Subject'を定義しましたか? – Alex

+0

@gsiradzeここではプランカが動作しています:https://plnkr.co/edit/KkWou7JV5FG4gojlsYI4? – Alex

関連する問題