$nextTick和$refs

这篇具有很好参考价值的文章主要介绍了$nextTick和$refs。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

$refs

$refs 获取DOM元素

作用:利用ref和$refs可以用于获取dom元素组件实例

特点: 查找范围--->当前组件内(更精确稳定)

  • 目标标签---添加ref属性

  • 恰当时机,通过this.$refs.xxx 获取目标标签

<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 获取组件对象

可以调用组件内的一切

 步骤

  1. 创建组件 / 引用组件 / 注册组件 / 使用组件
  2. 给组件起别名 ref
  3. 恰当时机,获取组件对象
  • 创建组件MyProduct.vue
<template>
    <div>
       <h2>MyProduct组件</h2>
    </div>
</template>

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

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

$nextTick

vue更新DOM-异步的

需求:编辑标题,编辑框自动聚焦

  • 点击编辑,显示编辑框

  • 让编辑框,立刻获取焦点

$nextTick 等DOM更新后,才会触发执行此方法里的函数体

语法 this.$nextTick(函数体)

this.$nextTick(()=>{
   this.$refs.inp.focus()
})

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

<template>
    <div>
        <p ref="myP">{{ count }}</p>
        <button @click="addCount">+1</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>

 场景

点击搜索按钮,弹出文本框并获取焦点,按钮消失

<template>
  <div>
    <button @click="btnFn" v-if="isShow">搜索</button>
    <input type="text" v-else placeholder="这是一个文本框" ref="myInp">
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: true
    }
  },
  methods: {
    async btnFn() {
      this.isShow = false
      // this.$refs.myInp.focus()
      // 原因:DOM更新是异步的 文本框还没有挂载到真实DOM上

      // this.$nextTick(() => {
      //   this.$refs.myInp.focus()
      // })
      // 等同于
      // await取代回调函数
      await this.$nextTick()
      this.$refs.myInp.focus()
    },
  },
}
</script>

组件name使用

可以用组件的name属性值,来注册组件名字

我们封装的组件,可以自己定义name属性组件名,让使用者有个统一的前缀风格

components/MyCom.vue 

<template>
    <div>我是一个Com组件</div>
</template>

<script>
export default {
   name: 'ComNameHaHa', // 注册时可以定义自己的名字
}
</script>

App.vue中注册和使用文章来源地址https://www.toymoban.com/news/detail-493508.html

<template>
  <div>
    <ComNameHaHa></ComNameHaHa>
  </div>
</template>

<script>
import Comfrom './components/MyCom.vue';
export default {
  components: {
    [Com.name]: Com, // 对象里的key是变量的话 [] 属性名表达式
    // 相当于
    // ComNameHaHa: Com,
  }
}
</script>

到了这里,关于$nextTick和$refs的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5利用Qt Designer制作一个可以拖动获取文件信息的页面

    前言 本篇在讲什么 用pyqt5制作一个简单的程序,拖动文件或脚本可以读取文件信息 本篇适合什么 适合 初学PyQt5 的小白 本篇需要什么 对 Python 语法有简单认知 对 Qt 有简单认知 依赖 Pycharm 编辑器 本篇的特色 具有全流程的 图文教学 重实践,轻理论,快速上手 提供全流程的

    2024年01月15日
    浏览(64)
  • C++笔记之是否知道了一个数组首元素的地址就可以获取该整个数组?-合众新能源汽车面试官问题

    事前提要:前段时间去面一个公司,面试官说知道了一个数组首元素的地址,就可以获取该整个数组,我当时就困惑,不知道大小和长度,只知道地址怎么就能获取。但也没反驳面试官,面试也没通过。

    2024年02月12日
    浏览(39)
  • react当我们有两个完全不相关的组件想要通信时,就可以利用这种模式,其中一个组件负责订阅某个消息,而另一个元素则负责发送这个消息。使用Context配合

    在nextjs项目中,发现两个组件没啥关系,例如一个是一直存在的头部组件,另一个是页面中的组件,当我点击头部组件中的特定按钮时,把数据传递到页面组件中,页面组件接受到canshu数据后在做其他操作,那么他们两个如何通讯,通过context配合观察者模式实现。 首先在其

    2024年02月15日
    浏览(48)
  • ChatGPT是否可以用于教育领域?

    ChatGPT在教育领域具有广泛的应用潜力。它可以用作教育工具、学习辅助和个性化教学的支持系统。以下是对ChatGPT在教育领域应用的详细分析: 1. 个性化学习辅助:ChatGPT可以根据学生的个性化需求提供定制化的学习辅助。它可以回答学生的问题、解释概念、提供实例和练习题

    2024年02月09日
    浏览(43)
  • Java可以用于物联网的开发吗?

    在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!Java是一种广泛使用的编程语言,它在物联网(IoT) 开发中的应用同样重要。以吓是ava在物联网

    2024年01月25日
    浏览(41)
  • 阿里云的云安全审计可以用于哪些安全事件与合规审核?

    阿里云的云安全审计可以用于哪些安全事件与合规审核? [本文由阿里云代理商[聚搜云www.4526.cn]撰写] 随着互联网的高速发展,各种互联网应用和服务也在不断涌现。但在运营过程中,安全事件和合规审核问题也不断出现。如何及时、准确地识别并解决这些问题,成为企业面

    2024年02月07日
    浏览(36)
  • PyAutoGUI Python 库,可以用于自动化鼠标和键盘的输入

    PyAutoGUI 是一个 Python 库,可以用于自动化鼠标和键盘的输入。它可以模拟人类的鼠标和键盘操作,例如单击、双击、拖动、按键、释放键等。PyAutoGUI 还提供了一些其他功能,例如屏幕截图和图像识别等。 以下是几个 PyAutoGUI 的典型案例和代码: 这些示例只是 PyAutoGUI 的一小部

    2024年02月10日
    浏览(53)
  • AI漫画生成,可用于小说漫画推文视频,也可以单独生成

    AI生成漫画图片的应用获取方式在最下面! 应用首页截图: AI语句转化页面截图:  绘图设置页面截图:  配音页面截图:  视频合成页面截图: ​​​​​​​ AI生成漫画图片在许多领域都具有广泛的应用前景: 创意设计与艺术创作: 设计师和艺术家可以利用AI生成的漫

    2024年02月01日
    浏览(190)
  • 阿里云的AI计算服务可以用于哪些领域中?如何提高计算效率?

    阿里云的AI计算服务可以用于哪些领域中?如何提高计算效率? 一、阿里云AI计算服务适用领域 1. 语音识别和合成:阿里云的AI计算服务可应用于自然语言处理技术,例如语音识别和文字转语音,助力智能客服、智能音箱等产品的研发。 2. 计算机视觉:在计算机视觉领域,阿

    2024年02月09日
    浏览(49)
  • 41.利用matlab 平衡方程用于图像(matlab程序)

    1. 简述        白平衡 白平衡的英文为White Balance,其基本概念是“不管在任何光源下,都能将白色物体还原为白色”,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿。 所谓的白平衡是通过对白色被摄物的颜色还原(产生纯白的色彩效果),进而达

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包