Vue实例的常用属性 Vue实例常用方法

news2025/7/21 18:34:26

vm.$ el和 vm.$ data

在new Vue()实例中经常设置el,data选项,data选项里面又可以定义很多属性(常称为数据属性),Vue提供了一些有用的实例属性与方法,它们都有前缀$,以便与用户定义的属性相区别。

使用Vue实例属性vm.$ el可以获取到Vue实例挂载的DOM元素,返回的是一个DOM对象,获取DOM元素后可以为它设置样式等。

使用 vm.$ data 可获取到Vue实例的data选项数据对象,返回的是一个对象。

<body>
    <div id="app">
        {{msg}}
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: "welcome to vue"
            }
        })

        console.log(vm.$el)
        console.log(vm.$data)

    </script>
</body>

在这里插入图片描述

可以看到我们获取了两个属性,一个是这个DOM元素对象,另一个是Vue实例中的data对象

我们可以改变这个DOM元素的样式:

        vm.$el.style.color = "red"
        vm.$el.style.backgroundColor = "yellow"

在这里插入图片描述
提问:
上例中的vm可以改为this吗?
回答:
不可以,在new Vue()内部才可以使用this。



vm.$ options 和 vm.$refs

前面也学过如下选项的设置:el 、data 、methods 、computed 、watch、 钩子函数等。此外也可以自定义一些选项,如简单属性或办法,然后通过vm.$ options获取自定义选项。当然,vm.$ options也可以获取默认选项值,只不过el、data等有更加简单的获取方式。

Vue采用的是Virtual DOM(虚拟DOM树)的做法渲染页面,如果直接操作DOM,很容易产生实际网页与Vue产生的Virtual DOM 不同步的问题,这里就可以使用ref来获取页面的DOM元素。

vm.$ refs属性可以用来获取页面中所有具有ref属性的元素,返回的是DOM元素集合的对象。


<body>
    <div id="app">
        {{msg}}
        <h2 ref="hello">你好</h2>
        <p ref="world">这是我写的vue程序</p>
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: "welcome to vue"
            },
            methods: {
                show() {
                    alert('111')
                },
                name: "zhangsan",
                age: 19,

            },
        })
        console.log(vm.$options.methods)

    </script>
</body>

这段代码通过vm.$ options 可以在外部访问到Vue实例中的methods属性

在这里插入图片描述
可以通过该语句执行Vue实例中的show方法
methods可省略

vm.$options.methods.show()

我们在打印以下vm.$ refs属性

console.log(vm.$refs)

在这里插入图片描述

发现获取到了DOM元素。

我们也可以更改DOM元素内容的样式,但用的是我们自己在元素标签内自定义的属性,

vm.$refs.hello.style.color = "yellow"

在这里插入图片描述



Vue实例常用方法

与Vue实例生命周期相关的方法

1、vm.$ mount()
vm.$ mount()用来实现手动挂载vm实例到某个DOM元素上。

<body>
    <div id="app">{{msg}}</div>
    <script>
        const vm = new Vue({
            data: {
                msg: "vue实例常用方法"
            }
        })

        vm.$mount("#app")
    </script>
</body>

上述代码也可以写成这样

<body>
    <div id="app">{{msg}}</div>
    <script>
        new Vue({
            data: {
                msg: "vue实例常用方法"
            }
        }).$mount("#app")

    </script>
</body>

2、vm.$ nextTick()

vm.$ nextTick(callback)在DOM元素更新完成之后再执行此回调函数,一般是在修改数据之后使用该方法,以便获得更新后的DOM元素。

<body>
    <div id="app">
        {{msg}}
        <h1 ref="title">标题:{{name}}</h1>
    </div>
    <script>
        // new Vue({
        //     data: {
        //         msg: "vue实例常用方法"
        //     }
        // }).$mount("#app")


        var vm = new Vue({
            data: {
                msg: "vue实例常用方法",
                name: "张三",
            }
        }).$mount("#app")
        console.log(vm.$refs.title)
    </script>
</body>

运行之后:
在这里插入图片描述
在这里插入图片描述
我们通过vm属性尝试改变张三

vm.name = "李四"

在这里插入图片描述
在这里插入图片描述
可以看到页面中的李四被渲染上去了,但是vm.$ refs.title.textContent属性的值依然是张三。

这是因为DOM还没更新完成。Vue实现响应式并不是数据发生改变之后DOM立即发生变化,需要按照一定的策略进行DOM更新,会需要一定的时间,而执行完vm.name = “李四”,之后立即执行console.log(vm.$ refs.title)代码,这个执行速度很快,比DOM更新要快,即下面语句先执行了,然后才更新的DOM,所以控制台显示的还是未更新前的。

那么如何做可以让 console.log(vm.$ refs.title.textContent)在DOM更新完成之后再执行呢?
使用vm.$ nextTick(callback)方法。该方法里面有一个回调函数,这个回调函数会等到DOM更新之后再执行。

    <div id="app">
        {{msg}}
        <h1 ref="title">标题:{{name}}</h1>
    </div>
    <script>
        // new Vue({
        //     data: {
        //         msg: "vue实例常用方法"
        //     }
        // }).$mount("#app")


        var vm = new Vue({
            data: {
                msg: "vue实例常用方法",
                name: "张三",
            }
        }).$mount("#app")
        vm.name = "李四"
        console.log(vm.$refs.title)
        console.log(vm.$refs.title.textContent)

        vm.$nextTick(function () {
            console.log(vm.$refs.title.textContent)
        })
    </script>

在这里插入图片描述

这次输出的值变为李四了。

为对象添加和删除属性的方法

  • 1、vm.$ set()

vm.$ set(object,key,value)的作用是为对象添加属性key,并给定属性值value。

 var vm = new Vue({
            el: "#app",
            data: {
                user: {
                    id: 1001,
                    name: "jack"
                }
            }
        })

下面更新新属性和添加属性

    <div id="app">
        <button @click="update">修改属性</button>
        <button @click="add">添加属性</button>
        <h1>{{user.name}}</h1>
        <h1>{{user.age}}</h1>
    </div>
    <script>


        var vm = new Vue({
            el: "#app",
            data: {
                user: {
                    id: 1001,
                    name: "jack"
                }
            },
            methods:{
                update(){
                    this.user.name="xiaofu"
                },
                add(){
                    this.user.age=19
                    console.log(this.user)
                }
            }
        })


    </script>

在这里插入图片描述
点击修改属性

在这里插入图片描述
点击添加属性:
在这里插入图片描述
输出的user对象多了一个age属性 值为我们设置的19

在这里插入图片描述

可以页面中并没有渲染出来
也就是说使用这种方式添加属性并不是响应式的,可以使用vm.$ set方法实现响应,代码如下:

vm.$set(this.user,"age","19")
        var vm = new Vue({
            el: "#app",
            data: {
                user: {
                    id: 1001,
                    name: "jack"
                }
            },
            methods: {
                update() {
                    this.user.name = "xiaofu"
                },
                add() {
                    this.$set(this.user, "age", 19)
                    console.log(this.user)
                }
            }
        })

在这里插入图片描述

成功渲染

注意:
这里的vm.$ set 中的vm可以换成this,写在new Vue()内部即可。

另外,vm.$ set是全局Vue.set 的别名,即可以用Vue.set来实现。

  • 2、vm.$ delete()

vm.$ delete(object,key)的作用是删除object对象的属性的key。

    <div id="app">
        <button @click="update">修改属性</button>
        <button @click="add">添加属性</button>
        <button @click="deleteage">删除属性</button>
        <h1>{{user.name}}</h1>
        <h1>{{user.age}}</h1>
    </div>
    <script>
        // new Vue({
        //     data: {
        //         msg: "vue实例常用方法"
        //     }
        // }).$mount("#app")


        // var vm = new Vue({
        //     data: {
        //         msg: "vue实例常用方法",
        //         name: "张三",
        //     }
        // }).$mount("#app")
        // vm.name = "李四"
        // console.log(vm.$refs.title)
        // console.log(vm.$refs.title.textContent)

        // vm.$nextTick(function () {
        //     console.log(vm.$refs.title.textContent)
        // })


        var vm = new Vue({
            el: "#app",
            data: {
                user: {
                    id: 1001,
                    name: "jack"
                }
            },
            methods: {
                update() {
                    this.user.name = "xiaofu"
                },
                add() {
                    this.$set(this.user, "age", 19)
                    console.log(this.user)
                },
                deleteage() {
                    this.$delete(this.user, "age")
                }
            }
        })


    </script>

在这里插入图片描述

点击删除属性:
在这里插入图片描述
19不见了,我们看看this.user

在这里插入图片描述
age属性被删除了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux服务:LVS负载均衡+keepalived架构

目录 一、LVS 1、负载均衡的结构 2、LVS三种工作模式 3、LVS调度算法 5、ipvsadm工具 二、KEEPALIVED 1、KEEPALIVED作用 2、KEEPALIVED原理 3、KEEPALIVED工作模式 4、KEEPLIVED问题及优化 三、LVSKEEPALIVED架构实现 1、实验目的 2、实验拓扑 3、实验准备 4、…

关于几种求最短路算法的碎碎念(Dijkstra、spfa、floyd)

目录 一、求1号点到n号点的最短路 1、所有边都是正数——Dijkstra &#xff08;1&#xff09;朴素版dijkstra - 邻接矩阵 &#xff08;2&#xff09;堆优化版dijstra - 邻接表 2、存在负权边——spfa 3、dijkstra和spfa的区别 二、起点和终点未知&#xff0c;求某两点间…

【16】linux命令每日分享——chmod修改权限

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

使用QIS(Quantum Image Sensor)图像重建总结(1)

最近看了不少使用QIS重建图像的文章&#xff0c;觉得比较完整详细的还是Abhiram Gnanasambandam的博士论文&#xff1a;https://hammer.purdue.edu/articles/thesis/Computer_vision_at_low_light/20057081 1 介绍 讲述了又墨子的小孔成像原理&#xff0c;到交卷相机&#xf…

[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译

[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译 文章目录[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译2012年英语二翻译真题总结积累&#x1f9d0;来点好玩的想法~ 这次试试让AI做更多的事情它居然给出了流汗黄豆&#x1f605;让它评价一下参考答案让AI评价我的翻译让AI …

工具及方法 - Windows下出现“IPv4/IPv6 No Internet Access“错误

家里的PS4&#xff0c;突然用电信网刷新不了PS会员游戏了。同样的网&#xff0c;登录微软账号也登不上。难道是网络问题&#xff1f; 可我换成手机热点就是好的&#xff0c;而且PS4再用电信网络就恢复了。 让我郁闷了一下&#xff0c;开始怀疑人生。后来上网查了一下&#xf…

IM即时通讯开发用Netty实现心跳机制、断线重连机制

所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性。注&#xff1a;心跳包还有另一个作用&#xff0c;经常被忽略&#xff0c;即&#xff1a;一个连接如果长时间不用&#xff0c;防火墙或者路由器就会…

百天百题(1/100)Java创建线程的方式?

首先创建线程有四种种方式&#xff1a; 1.继承Thread类 缺点&#xff1a;1.Java是不支持多继承的&#xff0c;所以我们不能在继承其他的类了 2.不能通过线程池来此操作&#xff0c;每次创建一个线程都需要先创建一个类&#xff0c;创建和销毁线程对整体的资源开销是非常大的。…

Thread 类的基本用法

1.线程创建 Thread类&#xff1a;创建的线程都是一样的 1.继承Thread,重写run&#xff1b; 2.实现Runable,重写run&#xff1b; 3.使用匿名内部类&#xff0c;继承Thread; 4.使用匿名内部类&#xff0c;实现Runnable&#xff1b; 5.使用lambda表达式&#xff08;常用&#xff…

IDEA插件系列(3):Maven Helper插件

一、引言在写Java代码的时候&#xff0c;我们可能会出现Jar包的冲突的问题&#xff0c;这时候就需要我们去解决依赖冲突了&#xff0c;而解决依赖冲突就需要先找到是那些依赖发生了冲突&#xff0c;当项目比较小的时候&#xff0c;还比较依靠IEDA的【Diagrams】查看依赖关系&am…

嵌入式学习笔记——使用寄存器编程操作GPIO

使用寄存器编程操作GPIO前言GPIO相关的寄存器GPIO 端口模式寄存器 (GPIOx_MODER) (x A..I)位操作GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x A..I)GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR) (x A..I/)GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x A..I/)GPIO 端口输入数据寄…

Python bool 到底怎么用? 【源码拆解】

人生苦短 我用python 一、布尔类型描述 布尔类型是计算机中最基本的类型&#xff0c; 它是计算机二进制世界的体现&#xff0c;一切都是 0 和 1 。 Python中的布尔类型只有两种值&#xff1a;True 和 False 。 &#xff08;注意&#xff1a;首字母都是大写&#xff0c;与C、Ja…

女生学习大数据怎么样~有前景么

当前大数据发展前景非常不错&#xff0c;且大数据领域对于人才类型的需求比较多元化&#xff0c;女生学习大数据也会有比较多的工作机会。大数据是一个交叉学科涉及到的知识量比较大学习有一定的难度&#xff0c;女生则有女生的优势&#xff0c;只要认真学习了都是可以做大数据…

STM32定时器的编码器接口模式

MCU为STM32L431&#xff0c;通用定时器框图&#xff1a; 编码器接口模式一共有三种&#xff0c;通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数&#xff1b;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下…

Python面向对象的三大特征 - - 封装、继承、多态

目录 一、三大特征介绍 1、封装&#xff08;隐藏&#xff09; 2、继承 3、多态 二、继承 1、子类扩展父类 1.语法格式 2.构造函数 2、类成员的继承和重写 1. 成员继承 2. 方法重写 3、查看类的继承层次结构 4、object根类 1.描述 2. dir() 查看对象属性&#xff…

JVM-可达性分析算法

JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈…

maven的学习

为啥要用maven 1、不用认为添加jar包所依赖的其他jar包 2、能在本地仓库只保留一份jar包&#xff0c;避免了多个工程使用相同jar包&#xff0c;需要重复导入的问题&#xff0c;减少冗余 3、能够规范添加jar包&#xff0c;在下载需要的jar包时有多种方法&#xff0c;但是不能保…

TeeChart VCL/FMX v2023 crack

TeeChart VCL/FMX v2023 crack TeeChart Pro VCL允许您为所有领域(包括商业、工程、金融、统计、科学、医疗、实时和网络)创建通用和专用图表和绘图应用程序。TeeChart Pro VCL具有多种图表类型的图表库&#xff0c;包括2D或3D线条、条形图、水平条、区域、点、饼图、箭头、气泡…

MySQL OCP888题解043-GTID模式下如何解决主键冲突问题

文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析3、知识点3.1、知识点1&#xff1a;GTID模式下跳过一个事务的方法4、总结1、原题 1.1、英文原题 A simple master-to-slave replication is currently being used. This information is extracted from the SH…

Kubernetes学习(三)Service

Service对象 为什么需要Service 每个Pod都有自己的IP地址&#xff0c;但是在Deployment中&#xff0c;在同一时刻运行的Pod集合可能与稍后运行该应用程序的Pod集合不同。 这就导致了一个问题&#xff1a;如果一组Pod&#xff08;称为后端&#xff09;为集群内其他Pod&#x…