ref引用细节点讲解

vue.js组件之H5页面,DOM标签或者组件中,通过ref="自定义name名称"引用的细节点

要点简介:[ 见下文案例 ]

  • 使用is=" "解决H5出现的标签解析bug 。
  • 子组件中 使用data,data必须是 一个 函数!
  • DOM标签中,引用ref定义的name:获得的是该DOM元素;如下文的: this.$refs.hello.innerHtml
  • 组件中,引用ref:获得的是该DOM对象。如下文的: this.$refs.name2.number

vue不建议我们在代码里面操作DOM,但是,在处理一些极其复杂的动画效果,不操作DOM,单单靠vue的数据绑定是无法完成实际需求的效果的。这就需要我们必须操作DOM。如何操作呢?

通过ref引用的形式,来操作DOM

下面我们给一个需求:当点击div的时候,div里面的内容被打印出来。

步骤如下

1.首先起一个引用的名字,比如hello:

ref='hello'

通过引用名称拿到该ref对应DOM里面的内容。

重要代码如下

<body>
    <div id="app">
        <div 
            ref="hello"
            @click="handleClick"
        >
            hello , 通过ref命名引用 操作DOM元素 !
        </div>
    </div>
        <script>
        var app = new Vue({
          el: '#app',
          methods: {
              handleClick: function() {                          alert(this.$refs.hello.innerHTML);
              }
          }
        })
    </script>
</body>

注意:this.$refs指页面所有引用。

2.如果是引用组件呢?

我们先看一段代码:

<body>
    <div id="app">
        <counter></counter>
        <counter></counter>
    </div>
        
    <script>
        Vue.component('counter', {
            template: '<button @click="handleClick">{{number}}</button>',
            data: function() {
                return {
                    number: 0
                }
            },
            methods: {
                  handleClick: function() {                              
                      this.number   ;
                  }
            }
        })
        var app = new Vue({
          el: '#app',
        })
    </script>
</body>

下面我们再给一个需求:数字的求和运算。

全部代码如下:

<body>
    <div id="app">
        <counter ref="name2" @change="handleChange"></counter>
        <counter ref="name3" @change="handleChange"></counter>
        <div>{{total}}</div>
    </div>
        
    <script>
        //子组件
        Vue.component('counter', {
            template: '<button @click="handleClick">{{number}}</button>',
            data: function() {
                return {
                    number: 0
                }
            },
            methods: {
                  handleClick: function() {                              
                      this.number   ;
                      this.$emit('change')//父组件中监听变化
                  }
            }
        })
        
        //父组件
        var app = new Vue({
            el: '#app',
            data: {
                total: 0
            },
            methods: {
                handleChange: function() { 
                    console.log(this.$refs.name2.number);
                    console.log(this.$refs.name3.number);
                    this.total = this.$refs.name2.number   this.$refs.name3.number;
                }
            }
        })
    </script>
</body>

注意:

this.$refs.name2是个对象!

这里使用了父子通信$emit(),不懂没关系,可以翻典籍或查看对应的讲解博客。

ref引用及插槽

ref引用

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

<p ref='p'>hello</p>
<child-component ref='child'></child-component>

当v-for用于元素或组件的时候,引用的信息将是包含DOM节点或组件实例的数组。

注意:因为ref本身是作为渲染结果被创建的,在初始渲染的时候你还不能访问它们,因为它们还不存在。 

ref引用DOM元素

引用ref引用页面上的DOM元素:

在这里插入图片描述

点击按钮后效果如图:

在这里插入图片描述

ref引用组件实例

要使用 ref 引用页面上的组件实例:父组件访问子组件实例

RefCom1组件:

在这里插入图片描述

子组件RefCom2:

在这里插入图片描述

实现效果:

在这里插入图片描述

实现标签的按需切换

通过布尔值 inputVisible 来控制组件中的文本框与按钮的按需切换,希望文本框显示出来后立即获得焦点。

补充: this.$nextTick(cb)方法

组件的$nextTick(callback)方法,会把callback回调函数推迟到下一个DOM更新周期之后执行。通俗讲,就是等组件的DOM异步地重新渲染完成后,再执行callback回调函数,从而能保证callback回调函数可以操作到最新的DOM元素。

在这里插入图片描述

在这里插入图片描述

插槽

编译作用域:父组件模板的所有东西都会在父级作用域内编译,子组件模板的所有东西都会在子级作用域内编译。

插槽(slot):是vue为组件的封装者提供的能力。允许在封装组件时,把不确定的,希望由用户指定的部分定义为插槽。插槽将父组件的内容与子组件的模板相混合,从而弥补了视图的不足。

如果父组件没有插入内容,那么slot的内容就作为默认出现;若父组件插入了内容,则slot的内容将被插入的内容替换掉。

匿名插槽

在封装组件时,可以通过<slot>元素定义插槽,从而为用户与理由内容占位符。匿名插槽(默认插槽),有且只有一个。

例如:

子组件:

在这里插入图片描述

父组件:

在这里插入图片描述

补充:

(1)如果在封装组件时没有预留任何<slot>插槽,则用户提供的内容都会被丢弃。

(2)后备内容:如果没有为插槽提供内容,那么后备内容会生效。

在这里插入图片描述

具名插槽

如果在封装组件时需要预留多个插槽节点,则需要为每个 <slot> 插槽指定具体的 name 名称。这种带有具体名称的插槽叫做“具名插槽”。

例如:

SlotSon组件:

在这里插入图片描述

SlotFather组件:

在这里插入图片描述

在这里插入图片描述

作用域插槽

在封装组件的过程中,可以为预留的<slot>插槽绑定props数据,这种带有props数据的<slot>叫做“作用域插槽”。

例如:

SlotSon2组件:(通过插槽给父组件传递数据)

在这里插入图片描述

SlotFather组件:接收插槽传过来的数据,赋给插槽内容

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

vue.js踩坑之ref引用细节点讲解的更多相关文章

  1. PHP 引用的概念

    这篇文章主要介绍了PHP的中引用的概念,帮助大家更好的理解和学习使用PHP,感兴趣的朋友可以了解下

  2. Vue3初探之ref、reactive以及改变数组的值

    在setup函数中,可以使用ref函数和reactive函数来创建响应式数据,下面这篇文章主要给大家介绍了关于Vue3初探之ref、reactive以及改变数组值的相关资料,需要的朋友可以参考下

  3. Vue.js 前端路由和异步组件介绍

    这篇文章主要介绍了Vue.js 前端路由和异步组件介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  4. vue.js出现Vue.js not detected错误的解决方案

    这篇文章主要介绍了vue.js出现Vue.js not detected错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. vue 全局引用公共的组件以及公共的JS文件问题

    这篇文章主要介绍了vue 全局引用公共的组件以及公共的JS文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. jsp页面中引用其他页面的简单方法

    下面小编就为大家带来一篇jsp页面中引用其他页面的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. PHP函数引用返回的实例详解

    其实PHP函数引用与php中变量引用一样,都使用的是&符号了,那么今天我们就一起来看看函数的引用返回的一些例子,有需要的朋友们可以参考借鉴,下面来一起看看吧。

  8. vue.js Table 组件自定义列宽实现核心方法

    这篇文章主要介绍了vue.js Table 组件自定义列宽实现核心方法,文围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  9. Vue.js和Vue.runtime.js区别浅析

    这篇文章主要介绍了Vue.js和Vue.runtime.js区别浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. 浅谈vue3中ref、toRef、toRefs 和 reactive的区别

    本文主要介绍了浅谈vue3中ref、toRef、toRefs 和 reactive的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部