您的位置:

Vue调用子组件方法

一、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>


  

<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>


  

<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>


  

<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>


  

<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>


  

<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>