2016-09-27 17 views
0

私はhttps://www.npmjs.com/package/angular2-selectパッケージを使用しています。私は次のように移入され、「tagOptions」の値を選択したタグを移入しようとしている:角度/ 2:角度2 - 観測値からの選択を選択してください

私が観測に加入し、次のようにサブスクライブ中に返されたデータをフォーマットしています:

/** 
* Load all available tags 
*/ 
private getTags() : void { 

    // The observable 
    this.tagService.tags$ 
    .subscribe((tags) => { 

     for (var i = 0; i < tags.length; i++) { 

      this.tagOptions.push({ value: tags[i].id, label: tags[i].name }); 
     } 

     this.variantForm.patchValue({ 
      tags: this.tagOptions 
     });    
    }); 

    let criteria = {columns: ['id','name']}; 
    // Make an ajax request and populate the observable 
    this.tagService.load(this.utilityService.encode(criteria)) 
    .subscribe(); 
} 

「core.umd.jsと私のテンプレートが

<ng-select 
    [options]="tagOptions" 
    placeholder="Select one" 
    multiple="true" 
    allowClear="true" 
    formControlName="tags"> 
</ng-select> 

ページのロードに出て私のテンプレート爆弾として読み込む:3462例外:未定義の 『選択』プロパティを設定できません"

私はselectにデータを入力する方法が間違っていると思われます。アドバイスをいただければ幸いです。

+0

おそらく非同期の問題です。 'this.tagOptions'にダミーデータを提供するとどうなりますか?サブスクリプションがデータを返すときに 'ng-select'が更新されますか? –

+0

こんにちは@Federico。私は非同期だと思う。選択にはダミーデータが正しく挿入されます。爆弾の値を試してパッチを当てるときです。 ng-selectは反応型をサポートしていない可能性がありますか?私は知るためにAngularをよく理解するふりをしていません。 – prime

+0

Hmmm。それが可能だ。パッチ値を使わないとどうなりますか? this.tagOptionsは[options]に束縛されているので、おそらく必要ありません。 –

答えて

0

<ng-select>は、レンダリング後の[options]入力の変更を反映していないようです。これを回避するには、<ng-select>がレンダリングされる前にデータを準備する必要があります。角度経路ガード 'resolve'はまさにこれを行います。サブスクリプションでresolve関数を待機させると、データが使用可能になるまでページはレンダリングされません。

Router resolve guideへのリンク。

ハッピーコーディング:)

関連する問題