非同期呼び出しが発生するまで作成されない項目のリストがあります。私は、作成されたアイテムの最初(または任意)のgetBoundingClientRect()を取得する必要があります。非同期呼び出しでコンポーネントの参照を取得する
は、例えば、このコードを取る:
<template>
<div v-if="loaded">
<div ref="myItems">
<div v-for="item in items">
<div>{{ item.name }}</div>
</div>
</div>
</div>
<div v-else>
Loading...
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
items: []
}
},
created() {
axios.get('/url/with/some/data.json').then((response) => {
this.items = response.data;
this.loaded = true;
}, (error) => {
console.log('unable to load items');
});
},
mounted() {
// $refs is empty here
console.log(this.$refs);
// this.$refs.myItems is undefined
}
};
</script>
をだから、私はmounted()
方法でmyItems
REFにアクセスしようとしているが、this.$refs
は、この時点で{}
空です。したがって、watch
というコンポーネントを使用して、さまざまな方法でref
の値を読み取ることができたのを確認しようとしましたが、失敗しました。
私を正しい方向に導くことができる人は誰ですか?
いつも、ありがとうございました!
UPDATES
追加mounted()
方法でthis.$watch
と$refs
はまだ{}
として戻ってきます。その後、updated()
メソッドをコードに追加してから$refs
にアクセスでき、動作するように見えました。しかし、これが正しい解決策であるかどうかは分かりません。
vuejsは通常、非同期データに基づいてdiv
を画面上の位置に動的に移動するような処理を行いますか?これは、私がやろうとしているのと似ています。一度レンダリングされると(非同期データに基づいてレンダリングされていなければならない場合)、要素を画面上で取得し、何かをするためにアクセスしますポジションに)?
は、私はより多くの情報については、上記の追加されたコメントを読んで使用することができます。 – Sean
申し訳ありませんが、私はあなたが何を求めているのか分かりません。このフィドルを見てくださいhttps://jsfiddle.net/0mf2w3hL/ 'ref'は非同期呼び出しの後に動作します – Daniel