vueコンポーネントの値の$attrs、$listeners
13210 ワード
vueコンポーネント伝達値のa t t t r s、attrs、attrs、listeners vueの通信方法でよく使われるのは、親パスサブprops、子パス親が@イベントをバインドすることによって、サブコンポーネント$emitが値を伝達することも、親コンポーネントがサブコンポーネントpropsに関数を伝達することもでき、サブコンポーネントが関数を呼び出し、パラメータを利用して値を伝達することもできる. 他にもvuex集中状態管理、eventBusすなわちイベントのグローバル$emit、$onはイベント伝達値 を放出する.および次の
$attrs
公式解釈:
親ドメインにpropとして識別されず(取得された)特性バインドが含まれている(
簡単に言えば、
props宣言以外のすべてのバインド属性を受信(class、styleを除く)
$listeners
公式解釈:
親ドメイン(
簡単に言えば、
受信テープを除く.nativeイベント修飾子のすべてのイベントリスナー
$attrs
、$listeners
.実はこの2つの属性のモード、つまり親コンポーネントAは多くのデータをサブコンポーネントBに伝達し、サブコンポーネントBは$attrs
を利用して収集し、v-bind="$attrs"
を利用してBに伝達されたサブコンポーネントC(つまりAコンポーネントの孫コンポーネント)を利用することができ、このように1つの属性を伝達する必要はありません.$listeners
は$attrs
と同様であり、$listeners
は、$emit
を介してイベントをサブアセンブリおよび孫コンポーネントでトリガするイベントを伝達する.$attrs
公式解釈:
親ドメインにpropとして識別されず(取得された)特性バインドが含まれている(
class
およびstyle
を除く).1つのコンポーネントがpropを宣言していない場合、ここにはすべての親ドメインのバインディング(class
およびstyle
を除く)が含まれ、v-bind="$attrs"
を介して内部コンポーネントを転送することができます.高レベルのコンポーネントを作成する場合に便利です.簡単に言えば、
props宣言以外のすべてのバインド属性を受信(class、styleを除く)
//parent
<template>
<div>
<Son :name='name' :age='age'/>
</div>
</template>
<script>
export default {
data() {
return {
name: 'Eric',
age: '20'
}
}
}
</script>
//Son
<template>
<div>
// Son ,
<GrandSon v-bind='$attrs'/>
</div>
</template>
<script>
export default {
props: ['name'],
mounted() {
// , name, age, name props , $attrs age
console.log(this.$attrs) //{age: '20'}
}
}
</script>
//GrandSon
<template>
<div>
</div>
</template>
<script>
export default {
mounted() {
//
console.log(this.$attrs) // {age: '20'}
}
}
</script>
$listeners
公式解釈:
親ドメイン(
.native
修飾子を含まない)v-on
イベントリスナーが含まれます.v-on="$listeners"
を介して内部コンポーネントを転送できます.より高いレベルのコンポーネントを作成するときに便利です.簡単に言えば、
受信テープを除く.nativeイベント修飾子のすべてのイベントリスナー
//parent
<template>
<div>
<Son @eventOne='eventHandler' @click.native='clickHandler'/>
</div>
</template>
<script>
export default {
methods: {
eventHandler() {
console.log(' Parent eventHandler')
},
clickHandler() {
console.log(' Parent clickHandler')
}
}
}
</script>
//Son
<template>
<div>
// Son ,
<GrandSon v-on='$listerners'/>
</div>
</template>
<script>
export default {
mounted() {
// , eventOne, click, click native , $listerners eventOne
console.log(this.$listerners) //{eventOne: fn}
this.$emit('eventOne') // Parent eventHandler
}
}
</script>
//GrandSon
<template>
<div>
</div>
</template>
<script>
export default {
mounted() {
// emit Parent
console.log(this.$listerners) // {eventOne: fn}
this.$emit('eventOne') // Parent eventHandler
}
}
</script>