zoukankan      html  css  js  c++  java
  • Vue学习笔记:Ref的使用

    官网上的说明

    1.了解Vue中的$refs在Vue中是怎么访问到DOM元素的

    <div id="app">
      <h1 ref="message">{{ message }}</h1>
      <button ref="myButton" @click="clickedButton">点击偶</button>
    </div>
    let app = new Vue({
        el: '#app',
        data () {
            return {
                message: 'Hi!大漠'
            }
        },
        methods: {
            clickedButton: function () {
                console.log(this.$refs)
                this.$refs.myButton.innerText = this.message
            }
        }
    })
    

      

    点击按钮之后,按钮的文本将更改变“Hi,!大漠”:

    使用$refs访问Vue中的DOM

    当然,我们也可以通过使用查询选择器来访问DOM元素来实现这样的效果,但是使用ref属性更简洁,而且这也是Vue中的方法。它也将更安全,因为你不会依赖于classid。因此,几乎不会因为更改了HTML的标签或者CSS样式受到影响。

    像Vue这样的JavaScript框架的主要目的之一就是让开发人员不必去处理DOM。所以你应该避免去做这样的事情,除非你真的需要去做。还应该要注意一个潜在的问题。

    正如你所看到的,我们在更新数据属性时覆盖了我们对DOM所做的更改。这样做的原因是,当访问DOM元素并直接操作它们时,实际上跳过了前面文章中讨论到的虚拟DOM。因此,Vue仍然控制着h1元素,甚至当Vue对数据中的做出更新时,它会更新虚拟DOM,然后更新DOM本身。因此,你应该小心使用对DOM的直接更改,就算是你不小心做了相应的修改,你所做的任何更改都将可能会被覆盖。虽然在使用refs时应该小心更改DOM,但是做只读操作相对来说比较安全,比如从DOM中读取值。

    另外来看看v-for指令中使用refs属性的效果。比如下面这个示例,给一个无序列表ul,通过v-for指令输出110的数字。

    <ul>
        <li v-for="n in 10" ref="numbers">{{ n }}</li>
    </ul>

    当你点击按钮时,$refs属性将在浏览器控制台中输出:

    使用$refs访问Vue中的DOM

    正如上图所看到的一样,把numbers属性添加到了对象中,但需要注意该值的类型。与之前看到的DOM元素不同,它实际上是一个数组,一个DOM元素的数组。当使用ref属性和v-for指令时,Vue会迭代所有DOM元素,并将它们放置在数组中。在这种情况下,这就输出了10li的DOM元素的数组,因为我们迭代了10次。每个元素都可以像我们之前看到的那样使用。

    总结

    如图,ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例:

    在上面的例子中,input的引用信息为input1 ,$refs 是所有注册过的ref的一个集合,

    console.log(this.$refs.input1)//<input type="text" id="input1">
    console.log(document.getElementById('input1'))//<input type="text" id="input1">

     这两种方法获得的都是Dom节点,而$refs相对document.getElementById的方法,会减少获取dom节点的消耗。

    2.父组件通过ref获取自组件进行操作:

     获取子组件:

  • 相关阅读:
    springboot项目引入通用mapper(tk.mybatis.mapper)的时候一些可能会踩的坑
    Zookeeper和Dubbo基本配置和调用
    Zookeeper和Dubbo介绍
    Git的基础命令大全,拉取推送,分支,合并,冲突
    Maven内置tomcat
    Maven高级,依赖传递和解决冲突,版本锁定,提取统一版本号
    SpringMvc的自定义异常,交给SpringMvc管理
    IDEA创建MavenWeb项目慢,问题根除
    Docker安装指南
    Docker容器入门
  • 原文地址:https://www.cnblogs.com/xuqp/p/9524342.html
Copyright © 2011-2022 走看看