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获取自组件进行操作:

     获取子组件:

  • 相关阅读:
    [翻译]Linux 内核里的数据结构 —— 基数树
    spring各版本下载地址
    两台机子的repcached Memcache 的安装与实验
    非root用户Memcached repcached安装
    VMVare 桥接上网
    JDBC executeBatch 抛出异常停止
    Ehcache jgroups方式同步缓存出现问题总结
    jquery $提示缺少对象$提示缺少对象
    Struts2标签遍历List<Map<String,String>>
    linux与windows回车换行符的区别
  • 原文地址:https://www.cnblogs.com/xuqp/p/9524342.html
Copyright © 2011-2022 走看看