Vue(基础五)_vue中用ref和给dom添加事件的特殊情况

一、前言

这篇文章涉及的主要内容有:

1、ref绑定在标签上是获取DOM对象

2、ref绑定在子组件上获取的是子组件对象

3、案列:自动获取input焦点

二、主要内容

1、基础内容:

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

(1)将ref绑定到标签上:测试之后发现在mounted()函数之后拿到的是button对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id=‘app‘></div>
    <script type="text/javascript" src="node_modules/vue/dist/vue.js"></script>
    <script>
        var App = {
            template:`
            <div class=‘app‘>
              <button ref=‘btn‘>我是按钮1</button>
            </div>`,

            created(){
                console.log(this.$refs.btn)
            },

            beforeMount:function(){
                console.log(this.$refs.btn);
            },

            mounted(){
                console.log(this.$refs.btn)//在这里才能拿到$refs.xxx
            }
        }

        new Vue({
            el:‘#app‘,
            data(){
                return {

                }
            },

            template:‘<App />‘,
            components:{
                App
            }
        })
    </script>

</body>
</html>

  (2)将ref绑定到子组件上:拿到的是子组件对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id=‘app‘></div>
    <script type="text/javascript" src="node_modules/vue/dist/vue.js"></script>
    <script type="text/javascript">
        Vue.component(‘subCom‘,{
            data(){
                return{

                }
            },

            template:`<div>
            这是子组件

            </div>`
        });

        var App = {
            data(){
                return{

                }
            },
            template:`<div>
              <button ref=‘btn‘>我是按钮1</button>
              <button ref=‘btn2‘>我是按钮2</button>
              <subCom ref=‘a‘></subCom>

            </div>`,//这里拿到的是子组件对象
            created(){
                console.log(this.$refs.btn);
            },

            beforeMount(){
                console.log(this.$refs.btn);
            },
            mounted(){
                console.log(this.$refs.btn);
                console.log(this.$refs.btn2);
                console.log(this.$refs.a);
            }
        }

        new Vue({
            el:‘#app‘,
            data(){
                return{}
            },
            template:‘<App/>‘,
            components:{
                App

            }
        })
    </script>

</body>
</html>

2、自动获取焦点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id=‘app‘></div>
    <script type="text/javascript" src="node_modules/vue/dist/vue.js"></script>
    <script type="text/javascript">
        var App = {
            data: function (){
                return {
                    isShow:false
                }
            },
            template:`<div class=‘app‘>
            <input type=‘text‘ v-show=‘isShow‘ ref = ‘input‘/>

            </div>`,
            //$nextTick 是在DOM更新循环结束之后执行延迟回调,在修改数据后使用$nextTick可以获取更新之后的DOM
            mounted:function(){
                this.isShow = true;
                console.log(this.$refs.input);
                this.$nextTick(function() {
                    this.$refs.input.focus();
                })
            }
        }
        new Vue({
            el:‘#app‘,
            data:function(){
                return {

                }
            },

            template:‘<App/>‘,
            components:{
                App
            }
        });
    </script>

</body>
</html>

三、总结

1、ref不能重名,重名后面会覆盖掉前面的

2、ref绑定到标签上,$refs.xxx获取到的是Dom对象

3、ref绑定到子组件上,获取到的是子组件实例对象

4、$nextTick([callback])是下一次dom对象更新后执行里面的回调函数

原文地址:https://www.cnblogs.com/xxm980617/p/10625458.html

时间: 2024-10-20 09:48:13

Vue(基础五)_vue中用ref和给dom添加事件的特殊情况的相关文章

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hib

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置 配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. web.xml是web项目最基本的配置文件,看这

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置

配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. Web.xml是web项目最基本的配置文件,看这个配置,可以快速知道web项目使用什么框架,它就像一个面板,切入我们想用的插件. applicationContext.xml是spring的基本配置,主要配置数据源.JPA实体管理器工厂.事务 spring-mvc.xml是SpringMVC的配置, applicatio

从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十七 ║Vue基础:给博客首页加花样(二)

回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码的学习,简单的通过一些假的数据来展示了下个人博客的首页列表,不知道大家是否还记得昨天讲的什么,如果不太清楚呢,可以再回顾下<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十七 ║Vue基础:使用Vue.js 来画博客首页(一)>,我们主要说到了,Vue的核心语法是什么,MVVM

Vue基础知识点

基础知识: vue的生命周期: beforeCreate/created.beforeMount/mounted.beforeUpdate/updated.beforeDestory/destoryed vue常用指令: v-for.v-bind(缩写形式:prop).v-on(缩写形式@click='sss').v-if/v-else/v-else-if.v-model.v-once.v-html.v-show... vue自定义组件:Vue.component('componentName'

Vue基础(环境配置、内部指令、全局API、选项、内置组件)

1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装完成后在命令行执行以下命令查看npm包管理器版本 npm -v npm中文文档:https://www.npmjs.cn/ 配置淘宝镜像 npm install cnpm -g --registry=https://registry.npm.taobao.org 然后执行 cnpm -v 查看版本信

Vue 基础篇

Vue 基础篇 一.框架与库的区别 JQ库->DOM(DOM操作) + Ajax请求 art-template库->模板引擎 框架 -> 全方位.功能齐全 简易的DOM体验 + 发请求 + 模板引擎 + 路由功能 + ... 代码上的不同: 一般使用库:调用某个函数,自己可以把控库的代码 一般使用框架:其框架在帮我们运行已编写好的代码 框架:初始化自身的一些行为 执行你所编写的代码 施放一些资源 库:小而精 框架:大而全 ( 框架包含了各种库 ) 二.起步 引包 直接用 <scri

Vue笔记五

十二.过滤器(filter) 示例代码: <template> <div id="app"> {{ msg | capitalize }} </div> </template> <script> export default { name: 'app', data () { return { msg: 'edited' } }, filters: { capitalize (value) { value = value.toS

将 Shiro 作为应用的权限基础 五:密码的加密/解密在Spring中的应用

考虑系统密码的安全,目前大多数系统都不会把密码以明文的形式存放到数据库中. 一把会采取以下几种方式对密码进行处理 密码的存储 "编码"存储 Shiro 提供了 base64和 16 进制字符串编码/解码的 API支持,方便一些编码解码操作. Shiro内部的一些数据的存储/表示都使用了 base64和 16 进制字符串. 下面两端代码分别对其进行演示 Stringstr = "hello"; Stringbase64Encoded = Base64.encodeTo

Java基础五

Java基础五 一.成员变量和局部变量 二.static关键字 三.成员变量和静态变量区别 四.main函数 五.静态函数什么时候用 六.静态代码块 七.构造代码块 构造代码块先于构造函数执行