vue中使用ref

vue中的使用ref是一种常见的手段,用于获取某个元素或者某个子组件。

父组件获取子组件的方法和属性

父组件

<template>
	<i-bind-phone ref="phoneRef" :phone="phone" />
</template>

<script>
import PhonePopup from '@/views/personal-center/system-setting/componets/bind-phone';
export default {
    
    
  components: {
    
    
    'i-bind-phone': PhonePopup,
  },

  data() {
    
    
    return {
    
    
      phone: null,
      },
  },
  methods: {
    
    
    // 点击查看手机绑定
    onClickChangePhone() {
    
    
    // 父组件调用子组件中的showPhone方法
      this.$refs.phoneRef.showPhone();
      console.log(this.$refs.phoneRef.visible)
    },
  },
};
</script>

子组件

<template>
	<div v-if="visible">
		....
	</div>
</template>

<script>
export default {
    
    
  data() {
    
    
    return {
    
    
      visible: false,
      },
  },
  methods: {
    
    
    showPhone() {
    
    
      this.visible = true
    },
  },
};
</script>

获取某些元素

<template>
	<div ref="divRef">
		想要获取的文字
	</div>
	<button @click="onClick">点击获取文字</button>
</template>

<script>
export default {
    
    
  data() {
    
    
    return {
    
    },
  },
  methods: {
    
    
    onClick() {
    
    
    // 方便快捷找到dom节点及其属性
      console.log(this.$refs.divRef.innerText)
    },
  },
};
</script>

ref套娃
父组件如何获取子组件中某个子组件的全部参数和方法?
其实就是使用ref套娃

this.$refs.phoneRef.$refs.test.a;

父组件

<template>
	<i-bind-phone ref="phoneRef" :phone="phone" />
</template>

<script>
import PhonePopup from '@/views/personal-center/system-setting/componets/bind-phone';
export default {
    
    
  components: {
    
    
    'i-bind-phone': PhonePopup,
  },

  data() {
    
    
    return {
    
    
      phone: null,
      },
  },
  methods: {
    
    
    // 点击查看手机绑定
    onClickChangePhone() {
    
    
    // 父组件调用子组件中的showPhone方法
      console.log(this.$refs.phoneRef.visible)
      this.$refs.phoneRef.showPhone();
      console.log(this.$refs.phoneRef.$refs.test.a) //123456
    },
  },
};
</script>

子组件

<template>
	<div v-if="visible">
		....
	</div>
	<i-test ref="test" />
</template>

<script>
import Test from '.......';
export default {
    
    
 components: {
    
    
    'i-test': Test,
  },
  data() {
    
    
    return {
    
    
      visible: false,
      },
  },
  methods: {
    
    
    showPhone() {
    
    
      this.visible = true
    },
  },
};
</script>

子组件中的子组件

<template>
	<div ref="divRef">
		想要获取的文字
	</div>
	<button @click="onClick">点击获取文字</button>
</template>

<script>
export default {
    
    
  data() {
    
    
    return {
    
    
      a: 123456
      },
  },
  methods: {
    
    
    onClick() {
    
    
    // 方便快捷找到dom节点及其属性
      console.log(this.$refs.divRef.innerText)
    },
  },
};
</script>

理论上ref套娃可以无限套下去,但没有必要。

猜你喜欢

转载自blog.csdn.net/glorydx/article/details/112242908