$nextTick和$refs

news/2024/7/10 1:58:27 标签: vue

$refs

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

可以调用组件内的一切

 步骤

  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-异步的

需求:点击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中注册和使用

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

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

动态组件

多个组件使用一个挂载点,并动态切换,就是动态组件

需求:完成一个注册功能页面,2个按钮,一个填写注册信息,一个填写用户简介信息 

步骤

  • 定义两个组件 UserName.vue,UserInfo.vue 2个组件
  • 引入到 App.vue组件中
  • data中定义变量来存放要显示的组件名
  • 要设置挂载点 <component>,使用 is 属性来设置要显示哪个组件
  • 点击按钮,修改变量里的组件名

http://www.niftyadmin.cn/n/453264.html

相关文章

C语言学习笔记:共用体

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 简介 …

Java:不支持发行版本5

错误 Java&#xff1a;不支持发行版本5 详细错误 同学在github上找到一个微服务项目&#xff08;基于maven进行构建&#xff09;&#xff0c;进行二开&#xff0c;导入项目运行控制台报错 Java&#xff1a;不支持发行版本5&#xff0c;笔者修改项目结构&#xff08; F i l e…

IDEA合并分支和.gitignore可能遇到的问题

将本地的 v1 分支合并到 master 分支上 1.确认你在 master 分支上&#xff0c;在命令行执行以下命令&#xff0c;这将切换到 master 分支。 git checkout master 2.拉取最新代码 在合并分支之前&#xff0c;请确保您的代码库是最新的。在命令行执行以下命令&#xff0c;这将从…

Cortext-M3系统:NVIC与中断控制(4)

1、NVIC概述 向量中断控制器&#xff0c;简称NVIC&#xff0c;是Cortex-M3不可分离的一部分&#xff0c;它与CM3内核的逻辑紧密耦合。NVIC的寄存器以存储器映射的方式来访问&#xff0c;除了包含控制寄存器和中断处理的控制逻辑之外&#xff0c;NVIC还包含了MPU、SysTick定时器…

软考A计划-系统集成项目管理工程师-信息化知识(五)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

JS自定义打印网页内容(详细全面)

浏览器自身打印 (不在赘述,重点是讲述打印自定义的几种方法与常见的问题) 使用 window.print() 调起浏览器自带的打印预览弹框打印默认会打印 body 里面所有内容const handlePrintPdf = () => {window.print(); }方式一:通过 iframe 打印部分区域 动态创建一个不可见的 i…

众安科技:一套成熟的it自动化运维系统应该具备哪些特点

随着企业信息化程度的提升和IT环境的复杂化&#xff0c;IT运维工作变得越来越重要。为了提高效率、降低风险&#xff0c;许多企业开始关注和采用自动化运维系统。然而&#xff0c;一套成熟的IT自动化运维系统应该具备哪些特点呢&#xff1f;本文将探讨这一话题&#xff0c;并介…

Mysql 常用SQL语句-2023

Mysql 常用SQL语句-2023 一 、创建数据库 / 表 命令二、修改表的命令三、对数据的操作&#xff08;增删改查&#xff0c;排序&#xff0c;分组&#xff09;四、多表联合查询五、DCL 数据控制语言六、DTL 数据事务语言七&#xff0c;时间操作 一 、创建数据库 / 表 命令 show d…