一、Vue3父组件调用子组件方法
父组件可以使用$refs引用子组件的实例并且调用子组件中的方法。$refs只会在组件渲染完成之后才能访问,所以在调用$refs的时候需要保证子组件已经渲染完成。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
handleClick() {
this.$refs.childRef.sayHello()
}
}
}
</script>
二、Vue子组件如何隔代调用方法
如果需要在子组件中调用父组件的方法,可以通过emit向上传递事件并且传递参数的方式实现。
<script>
export default {
methods: {
handleClick() {
this.$emit('test', '我是子组件传递的参数')
}
}
}
</script>
三、Vue父组件调用子组件中的方法
父组件可以使用$children访问子组件集合并且调用子组件中的方法,可以使用$children来访问指定名称的子组件的实例。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
handleClick() {
const childComponent = this.$children.find(item => item.$options.name === 'Child')
childComponent.sayHello()
}
}
}
</script>
四、Vue调用子组件的方法
使用props父组件向子组件传递参数,再通过传递参数的方法调用子组件的方法。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
data() {
return {
value: '我是父组件传递的参数'
}
},
methods: {
sayHello() {
console.log('我是父组件的方法')
}
}
}
</script>
{{ value }}
<script>
export default {
props: {
value: {
type: String,
default: ''
},
sayHello: {
type: Function,
default: () => {}
}
},
methods: {
triggerSayHello() {
this.sayHello()
}
}
}
</script>
五、Vue子调用父组件方法
使用父子组件间事件派发的方式,可以在子组件中触发父组件中的方法。
<script>
export default {
methods: {
handleClick() {
this.$emit('test', '我是子组件传递的参数')
}
}
}
</script>
{{ value }}
<script>
export default {
data() {
return {
value: ''
}
},
methods: {
handleTest(str) {
this.value = str
}
},
mounted() {
this.$on('test', this.handleTest)
},
beforeDestroy() {
this.$off('test', this.handleTest)
}
}
</script>
六、Vue父调用子组件方法
使用$children来访问指定名称的子组件的实例,调用子组件的方法。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
handleClick() {
this.$refs.childRef.triggerSayHello()
}
}
}
</script>
{{ value }}
<script>
export default {
data() {
return {
value: '我是子组件的参数'
}
},
methods: {
sayHello() {
console.log('我是子组件的方法')
},
triggerSayHello() {
this.sayHello()
}
}
}
</script>
七、父组件调用子组件的方法
使用$children来访问指定名称的子组件的实例,调用子组件的方法。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
handleClick() {
const childComponent = this.$children.find(item => item.$options.name === 'Child')
childComponent.sayHello()
}
}
}
</script>
{{ value }}
<script>
export default {
data() {
return {
value: '我是子组件的参数'
}
},
methods: {
sayHello() {
console.log('我是子组件的方法')
}
}
}
</script>
八、Vue父子组件传方法
使用props父组件向子组件传递一个方法,子组件可以直接调用这个方法。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
sayHello() {
console.log('我是父组件的方法')
}
}
}
</script>
{{ value }}
<script>
export default {
props: {
sayHello: {
type: Function,
default: () => {}
}
},
methods: {
handleClick() {
this.sayHello()
}
}
}
</script>
九、Vue父子组件传递事件
使用$emit向上传递事件并且传递参数的方式实现父子组件之间的通信。
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
handleTest(str) {
console.log(`我是父组件,收到子组件的参数${str}`)
}
}
}
</script>
<script>
export default {
methods: {
handleClick() {
this.$emit('test', '我是子组件传递的参数')
}
}
}
</script>
十、Vue子组件触发父组件事件
使用$emit向上传递事件并且传递参数的方式实现父子组件之间的通信。
<script>
export default {
methods: {
handleClick() {
this.$emit('test', '我是子组件传递的参数')
}
}
}
</script>
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
methods: {
handleTest(str) {
console.log(`我是父组件,收到子组件的参数${str}`)
}
}
}
</script>