テンプレートは計算されたプロパティの内容をキャプチャできませんが、ライフサイクルフックはそれを通常どおり記録できます。
P粉604669414
2023-08-30 23:44:38
<p>ショッピング カートの内容を妨げずに商品を選択して注文できるオンライン ストアを作成しています。私の実装方法は、カートの商品と個々の商品のページを共有することです。 productID パラメータが設定されているかどうかを確認し、設定されている場合は別のデータを使用します。 </p>
<p>これは私が書いた関数です: </p>
<pre class="brush:js;toolbar:false;"> 計算: {
製品: function() {
if ( this.$route.query.pid ) {
var product = [{}]
axios.get(`/api/products/${this.pid}`).then(response => {
製品[0].id = 応答.データ[0].id
製品[0].name = 応答.データ[0].name
製品[0].単位 = 応答.データ[0].単位
製品[0].イメージ = 応答.データ[0].製品イメージ[0].イメージ
製品[0].価格 = 応答.データ[0].価格
製品[0].数量 = 1
})
戻り値 Object.assign(product)
} それ以外 {
this.$store.state.cart を返す
}
}
}、
</pre>
<p>これは、データを正常に取得するライフサイクル フック (beforeMount) です: </p>
<pre class="brush:js;toolbar:false;"> beforeMount() {
console.log(this.products)
}
</pre>
<p>ここでの問題は、products 属性がテンプレート内で空であると見なされることです。クエリ パラメーターを指定せずにページにアクセスすると、すべてが正常に動作しますが、個々の製品の計算されたデータが見つかりません。 </p>
<p>この問題を解決するにはどうすればよいですか?よろしくお願いいたします。 </p>
vue/no-async-in-computed-properties
プロパティはテンプレートにはキャプチャされませんが、ライフサイクル フックは計算されたプロパティを通じてデータを取得できます
これがコンソールに表示される理由は、ほとんどの最新のブラウザが オブジェクトをライブ データとしてログに記録するためです (オブジェクトが更新されると、コンソールも更新されます)。したがって、コンソールに表示されるのは、
を使用して確認できます。console.log
が実行されたときのオブジェクトの値ではなく、後の値です。これは、console.log(JSON.parse(JSON.stringify(this.products)))
...この問題を解決するには、
を使用します。 リーリーcomputed
の代わりに
watch