vue----$refs / $nextTick

$refs获取DOM

利用ref和$refs获取DOM元素


<template>
  <div>
    <p>获取原生Dom元素</p>
    <h1 id="myH" ref="myH">我是一名学员</h1>
  </div>
</template>

<script>
export default {
  mounted() {
    // console.log(document.getElementById('myH'))
    /* 
    1:给标签定义ref属性
    2:通过this.$refs.属性名  获取元素
    */
    console.log(this.$refs.myH)
  },
}
</script>

$refs获取组件对象

  • 创建组件MyProduct.vue
<template>
  <div>MyProduct组件</div>
</template>

<script>
export default {
  data() {
    return {
      msg: 'hello',
    }
  },
  methods: {
    fn() {
      console.log('组件被调用了')
    },
  },
}
</script>
  • 获取组件对象,调用组件方法
<template>
  <div>
    <h2>获取组件对象--可以调用组件内的一切</h2>
    <my-product ref="myP"></my-product>
  </div>
</template>

<script>
/* 
 1:创建组件/引入组件/注册组件/使用组件
 2: 给组件起别名 ref
 3: 恰当时机,获取组件对象
*/
import MyProduct from './components/MyProduct'
export default {
  components: {
    MyProduct,
  },
  mounted() {
    let myPobj = this.$refs.myP
    console.log(myPobj.msg)
    myPobj.fn()
  },
}
</script>

$nextTick

vue更新DOM--异步的

需求:点击count++,通过原生DOM拿标签内容,无法拿到新值

<template>
  <div>
    <h2>$nextTick</h2>
    <p ref="myP">
      {{ count }}
    </p>
    <button @click="addCount">count++</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0,
    }
  },
  methods: {
    addCount() {
      this.count++ //vue监听数据更新,开启一个DOM更新队列(异步任务)
      // console.log(this.$refs.myP.innerHTML) //0

      /* 
         vue更新DOM 异步任务
         解决:this.$nextTick
         过程: DOM更新完会挨个触发$nextTick里的函数体
      */
      this.$nextTick(() => {
        console.log(this.$refs.myP.innerHTML)
      })
    },
  },
}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值