2016-12-16 8 views
0

特定のイベントでは、別のルートに移動し、入力フィールドの1つにフォーカスする必要があります。資格・コンポーネントでrouter.navigateが動作していないときの角度2のフォーカス要素

マイテンプレート

<qualification> 

<address (updateAddress)="updateAddress($event);"> 

</address> 

</qualification> 
アドレスコンポーネントのHTMLで

ボタンの1

<span class="filter-address" (click)="updateAddressClicked()">Update Address </span> 
アドレスコンポーネントで

@Output() updateAddress = new EventEmitter(); 
updateAddressClicked($event){ 
    this.router.navigate(['/page/one'], {preserveQueryParams: true}) 
    this.updateAddress.emit(true); 
} 

私はvc

ように定義されていますqualificatioinでは
@ViewChildren('inputone') vc; 

HTML

<input #inputone name="inputone"> 

updateAddress($event){ 
    this.vc.first.nativeElement.focus() 
} 

のI /ページ/つのルートで午前/ページ/つのルートに移動

(すなわちそれ自体)焦点が働く。しかし、私は別のルートにいる場合は言うことができます/イベントは/ページへのナビゲーションをトリガーするときにページ/ 2は、/ 1は結構ですが、私はすべてのヘルプは高く評価され

EXCEPTION: Uncaught (in promise): TypeError: Cannot read property 'nativeElement' of undefined

を言うエラーが出ます。あなたの現在のコンポーネントで

+0

どのライフサイクルイベントでフォーカスコードが呼び出されていますか?完全なコンポーネントコードを表示できますか? – JayChase

+0

フォーカスコードが機能しています。これは、別のコンポーネントでイベントの後にトリガーされます。 – rishal

+0

@JayChase OP – rishal

答えて

0

this.router.navigateByUrl(['/page/one?event=true'], {preserveQueryParams: true}) 

は、その後、あなたのコンポーネントには、あなたがこれを行うには、ルーティングされています。

constructor(private activatedRoute: ActivatedRoute) {} 

ngAfterViewInit() { 
    this.subscription = this.activatedRoute.params.subscribe(
    (param: any) => { 
    let event = param['event']; 
    if(event) { 
     this.vc.first.nativeElement.focus(); 
    } 
}); 
} 

イベントクエリアパラムの存在に基づいて条件付きでフォーカスする必要があります。

+0

しかし、イベントがトリガーされた後にだけ呼び出す必要があるので、通常のルーティングは入力をフォーカスしません。特別なイベントがあるときにのみ入力を集中してください。 – rishal

+0

あなたはparam [イベント]、私はパラメータにイベントに関連する変数を渡していません。 – rishal

+0

これは、条件付きで入力フォーカスをトリガできるので、そのイベントの後にのみ入力フォーカスが必要だと言いました。条件付き実行の基礎として、2つのコンポーネント間で共有される二重結合変数を使用できますが、コードを見ずには本当に助けにはなりません。あるいは、項目を設定してlocalStorageでクリアするだけでもかまいません。 – Baconbeastnz

関連する問題