要素を取得
要素を取得するのは簡単ではありませんか?document.querySelector("#id") から直接取得することはできませんか? たとえば、以下のコード。Vue を書く過程で、この種のコードを書くことはありませんが、次のコードは Vue で実行できます。
methods:{
getEl(){
let title= document.querySelector(".title")
}
}
ほとんどの場合、応答性の高い方法でデータを直接更新するために Mustache 構文を使用します。最初に特定の要素を見つける必要はありません。しかし、特定の要素だけを取得したい場合は、ref 属性を介して特定の要素を取得できます。
ステップ 1: ref 属性を追加して名前を付けます。
<template>
<h1 ref="title" class="title">Hello</h1>
</template>
ステップ 2: 要素は $ref を介して取得できます。
mounted() {
console.log(this.$refs.title)
}
ref="title" の名前は任意であり、クラスの名前と同じである必要はありません。
いつrefを使用するか
要素をまったく必要としないため、要素を取得することはめったにありません。データを変更して、vue が自動的に UI を更新するようにするだけで済みます。コード エディターを作成したり、コードを生成する関数を実装したりする場合など、いくつかの特別なシナリオのみを使用できます。
さらに便利なのは、ref がコンポーネント インスタンスも取得できることです。
コンポーネント インスタンスを取得する
コンポーネントのインスタンスを取得した後、コンポーネントのメソッドを呼び出すことができますが、これは依然として有用です。
Banner.vue を作成し、それを App.vue に参照します。
Banner.vue のテンプレート:
<template>
<div class="banner">
<h1>banner</h1>
</div>
</template>
Banner.vue でメソッドを定義する
methods:{
showBanner(){
console.log("showBanner")
}
}
ref と $ref を介して対応するバナー コンポーネントを取得し、対応するメソッドを呼び出すことができます。
<template>
<banner ref="banner"/>
</template>
mounted() {
//组件实例代理对象
console.log(this.$refs.banner)
//调用组件方法
this.$refs.banner.showBanner()
//组件元素
console.log(this.$refs.banner.$el)
}
これは、これがバナーのプロキシ オブジェクトであることを証明できる showBanner メソッドを含む、取得されたプロキシ オブジェクトです。
次に、呼び出した showBanner() メソッドもコンテンツを出力します。
最後に、バナー コンポーネントの最上位要素が取得されます。
最上位要素が 1 つしかない場合は、this.refs.banner.refs.banner.r e f s . b a n e r . el は最上位の要素を直接取得します. 複数の要素がある場合は、最初のノード node (通常は #text、つまり改行) を取得します.