2016-11-19 14 views
4

VueJS補間で未定義オブジェクトプロパティのデフォルト値を使用する方法は?私のdataは計算された変数であり、最初に選択ボックスでselectedDataIdを選択する前に定義されていないので、vueはを送信します。 "未定義のgrandChild 'プロパティを読み取ることができません"エラー。VueJS補間で未定義オブジェクトプロパティのデフォルト値を使用する方法は?

P.S:私はあなたが二回selectedDataを宣言している

selectedData() { 
    return _.chain(this.data) 
     .find({id: this.selectedDataId}) 
     .defaults(...default object...) 
     .value() 
} 
+0

私はVue.jsに精通していませんが、プレーンなJSでは、プロパティが{{selectedData.child && selectedData.child.grandChild}} ' – Nico

答えて

7

は、次のパターンを使用することができます。

+0

で定義されていることを確認できました。これは最も有益な答えです。私の宣言に重複があるため、 'selectedData'は@GuyCが指摘した' data'の中にあってはなりません。だから私は '{{selectedData && selectedData.child && selectedData.child.grandChild || 'デフォルト値'}}} ' –

0

を使用しています。 v-if="selectedItem"または方法:Vueのは、フィルタ方式で建てられているようにあなたが本当にここにlod​​ash必要はありませんif (selectedItem)

:それはあなたがちょうどあなたのテンプレートの中にこれをテストすることができ未定義されているとの問題のよう

selectedData() { 
    const selectedItem = this.data.filter((item) => { 
     return item.id == this.selectedDataId 
    }) 

    return selectedItem.length ? selectedItem[0] : {} // i'd set null here on fail 
} 

よりもむしろselectedItem.lengthは0そして、上記のテストは、空のオブジェクトがそれらをtruthyようになります渡し、動作する場合、私はおそらくちょうどnullに上記を設定しますデフォルトのオブジェクト。それはfalsyある場合

{{ selectedData.child && selectedData.child.grandChild || 'default value' }} 

それが安全grandChildと印刷「のデフォルト値」をチェックします:

3

、あなたはデータオブジェクトからそれを削除する必要があり、これを試してくださいlodash

<div> 
    {{ selectedData.child.grandChild }} 
</div> 

new Vue({ 
    data: { 
     selectedDataId: null, 
     selectedData: {}, 
     data: [ //array of objects here ] 
    }, 
    computed: { 
     selectedData() { 
      return _.find(this.data, (d) => { 
       return d.id == this.selectedDataId; 
      }); 
     } 
    } 
}); 
関連する問題