前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue2(二)侦听器和计算属性

Vue2(二)侦听器和计算属性

原创
作者头像
CodeGoat24
修改于 2022-02-11 06:13:00
修改于 2022-02-11 06:13:00
60900
代码可运行
举报
运行总次数:0
代码可运行

上篇知识回顾:

  1. 什么是Vue?
  2. Vue的两大特性实现原理
  3. Vue的六大指令
  4. Vue的过滤器

本篇概要

  • 什么是watch侦听器
  • 什么是计算属性
  • vue-cli脚手架的使用

一、watch侦听器

1、介绍:

watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作

当我们给某个数据对象加上侦听器后,一旦该对象的值发送改变,就会触发我们在监听器上自定义的函数,从而执行我们在函数中定义的的操作。

2、方法格式的侦听器

(1)使用:

在Vue实例的watch节点下,以该数据对象的名称为方法名,定义函数。

函数中会有两个默认参数:

1、数据对象被改变后的新值 newVal

2、数据对象被改变前的旧值 oldVal

(2)缺点:

1、无法在刚进入页面的时候,自动触发

2、如果侦听的是一个对象,如果对象中的属性发生了变化,不会触发侦听器

(3)语法格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="app">
  <input type="text" v-model="username">
</div>

const vm = new Vue({
      el: '#app',
      data: {
        username: 'admin'
      },
      // 所有的侦听器,都应该被定义到 watch 节点下
      watch: {
        // 侦听器本质上是一个函数,要监视哪个数据的变化,就把数据名作为方法名即可
        // 新值在前,旧值在后
        username(newVal, oldVal) {
            console.log(newVal)
          })
        }
      }
    })

3、对象格式的侦听器

(1)使用

在watch节点下,以该数据对象的名称创建对象格式的侦听器,并在对象内创建hander(newVal,oldVal)

方法,来响应数据对象值的改变。

(2)好处

1、可以通过 immediate 选项,让侦听器自动触发

2、可以通过 deep 选项,让侦听器深度监听对象中每个属性的变化

(3)immediate 选项

默认情况下,Vue的组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使用 immediate 选项

示例代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      watch: {
        // 定义对象格式的侦听器
        username: {
          // 侦听器的处理函数
          handler(newVal, oldVal) {
            console.log(newVal, oldVal)
          },
          // immediate 选项的默认值是 false
          // immediate 的作用是:控制侦听器是否在组件加载后就立刻自动触发一次!
          immediate: true
        }
      }

(4)deep 选项

如果 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到

此时需要使用 deep 选 项,同时监听该对象的属性变化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data: {
        // 用户的信息对象
        info: {
          username: 'admin'
        }
      },
watch: {
        info: {
          handler(newVal) {
            console.log(newVal.username)
          },
          // 开启深度监听,只要对象中任何一个属性变化了,都会触发“对象的侦听器”
          deep: true
        }
      }

也可以直接监听该对象的单个属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
watch: {
        // 如果要侦听的是对象的子属性的变化,则必须包裹一层单引号
        'info.username'(newVal) {
          console.log(newVal)
        }
      }

二、计算属性

1、介绍:

计算属性指的是通过一系列运算之后,最终得到一个属性值。

这个动态计算出来的属性值可以被模板结构或 methods 方法使用。

计算属性应定义在Vue实例的computed节点下,并以方法的形式定义,方法内最后必须return一个字符串

2、计算属性的特点

① 虽然计算属性在声明的时候被定义为方法,但是计算属性的本质是一个属性

② 计算属性会缓存计算的结果,只有计算属性依赖的数据变化时,才会重新进行运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <div>
      <span>R</span>
      <input type="text" v-model.number="r">
    </div>
    <div>
      <span>G</span>
      <input type="text" v-model.number="g">
    </div>
    <div>
      <span>B</span>
      <input type="text" v-model.number="b">
    </div>
    <span>“结果为”+ {{ rgb }}</span> //显示计算属性的值
<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        // 红色
        r: 0,
        // 绿色
        g: 0,
        // 蓝色
        b: 0
      },
      // 所有的计算属性,都要定义到 computed 节点之下
      // 计算属性在定义的时候,要定义成“方法格式”
      computed: {
        // rgb 作为一个计算属性,被定义成了方法格式,
        // 最终,在这个方法中,要返回一个生成好的 rgb(x,x,x) 的字符串
        rgb() {
          return `rgb(${this.r}, ${this.g}, ${this.b})`
        }
      }
    });
</script>

三、Vue-cli的使用

1、什么是Vue-cli?

vue-cli 是 Vue.js 开发的标准工具。它简化了程序员基于 webpack 创建工程化的 Vue 项目的过程

使得程序员可以专注在撰写应用上,而不必花好几天去纠结 webpack 配置的问题。

2、安装和使用

vue-cli 是 npm 上的一个全局包

(1)使用 npm install 命令,即可方便的把它安装到自己的电脑上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install -g @vue/cli 

(2)基于 vue-cli 快速生成工程化的 Vue 项目的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vue create 项目的名称

(3)然后选择自己项目所需要用到的包,vue-cli会自动帮你安装到项目中

(4)然后就会在项目根目录下生成以下文件夹结构:

3、部分生成文件介绍

在工程化的项目中,vue 只需要通过 main.js 把 App.vue 渲染到 index.html 的指定区域中。

(运行npm run build后,webpack会将项目中的.vue组件打包,并在项目根目录生成dist文件夹,其中的index.html文件内容就是App.vue渲染上去的)

其中:

assets 文件夹:存放项目中用到的静态资源文件,例如:css 样式表、图片资源

components 文件夹:程序员封装的、可复用的组件,都要放到 components 目录下

main.js 是项目的入口文件。整个项目的运行,要先执行 main.js

App.vue 是项目的根组件

这里会涉及到webpack相关的知识,因为vue-cli本身就是基于webpack帮我们创建并配置工程化的前端新项目,如果你们还有些迷惑,可以看看我之前写的(前端工程化:Webpack之常见配置详解(干货)

总结:

不知道大家看完后,是否会产生一个疑问,我在文章中提到的Vue组件是什么呢?它有什么作用?....

下一篇文章我将与大家分享Vue组件及其生命周期的相关知识

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Python - 多线程
**线程(Thread)**也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
为为为什么
2022/08/04
6920
python3 gil锁_python同步锁
python的使用者都知道Cpython解释器有一个弊端,真正执行时同一时间只会有一个线程执行,这是由于设计者当初设计的一个缺陷,里面有个叫GIL锁的,但他到底是什么?我们只知道因为他导致python使用多线程执行时,其实一直是单线程,但是原理却不知道,那么接下来我们就认识一下GIL锁
全栈程序员站长
2022/09/19
6590
python3 gil锁_python同步锁
Python进阶——为什么GIL让多线程变得如此鸡肋?
做 Python 开发时,想必你肯定听过 GIL,它经常被 Python 程序员吐槽,说 Python 的多线程非常鸡肋,因为 GIL 的存在,Python 无法利用多线程提高性能。
_Kaito
2021/03/23
8730
Python进阶——为什么GIL让多线程变得如此鸡肋?
python GIL解释器
全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的工具,使得在同一进程内任何时刻仅有一个线程在执行。常见例子有CPython(JPython不使用GIL)与Ruby MRI。
云深无际
2021/04/14
1.1K0
python GIL解释器
Python中的GIL锁
在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行。
Python碎片公众号
2021/02/26
4660
Python中的GIL锁
Python 多线程与多进程
原文地址:http://www.cnblogs.com/whatisfantasy/p/6440585.html
Dar_Alpha
2018/10/09
6170
进程队列补充、socket实现服务器并发、线程完结
解释型语言单个进程下多个线程不可以并行,但是向C语言等其他语言中在多核情况下是可以实现并行的,所有语言在单核下都是无法实现并行的,只能并发。
GH
2019/12/16
5920
进程队列补充、socket实现服务器并发、线程完结
Python 多进程与多线程
看到这里,也许你会疑惑。这很正常,所以让我们带着问题来阅读本文章吧。 问题: 1、Python 多线程为什么耗时更长? 2、为什么在 Python 里面推荐使用多进程而不是多线程?
猴哥yuri
2018/08/16
1.2K0
python的多线程是否没有用了[通俗易懂]
相同的代码,为何有时候多线程会比单线程慢,有时又会比单线程快? 这主要跟运行的代码有关: 1、 CPU密集型代码 (各种循环处理、计数等等 ),在这种情况下,由于计算工作多, ticks计数很快就会达到 100阈值,然后触发 GIL的释放与再竞争 (多个线程来回切换当然是需要消耗资源的),所以 python下的多线程遇到 CPU密集型代码时,单线程比多线程效率高。 IO密集型代码 (文件处理、网络爬虫等 ),多线程能够有效提升效率 (单线程下有 IO操作会进行 IO等待,造成不必要的时间浪费,而开启多线程能在 线程 A等待时,自动切换到线程 B,可以不浪费 CPU的资源,从而能提升程序执行效率 )。
全栈程序员站长
2022/09/06
4730
python的GIL锁
处理机:是计算机中存储程序和数据,并按照程序规定的步骤执行指令的部件。包括中央处理器、主存储器、I/O接口。
西西嘛呦
2020/08/26
4530
【干货】python多进程和多线程谁更快
而python里面的多线程显然得拿到GIL,执行code,最后释放GIL。所以由于GIL,多线程的时候拿不到,实际上,它是并发实现,即多个事件,在同一时间间隔内发生。
未名编程
2024/10/12
1000
【干货】python多进程和多线程谁更快
python多线程菜鸟教程_python实现多线程有几种方式
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说python多线程菜鸟教程_python实现多线程有几种方式,希望能够帮助大家进步!!!
Java架构师必看
2022/07/06
7680
Python 中的 GIL(全局解释器锁)
在Python中,GIL是一个广为人知的概念,它影响了Python解释器的多线程执行。GIL(Global Interpreter Lock)是一种机制,它可以确保在同一时间只有一个线程在Python解释器中执行字节码。这意味着,尽管Python中有多线程的概念,但在实际执行过程中,同一时刻只有一个线程被允许执行。
疯狂的KK
2023/07/24
5590
Python 中的 GIL(全局解释器锁)
Python Threading 学习笔记 | 5、不一定有效率GIL
GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。
TeamsSix
2019/11/05
3820
python3.9多线程_python多线程没用
线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行
全栈程序员站长
2022/09/19
1.1K0
python3.9多线程_python多线程没用
Python的全局解释器锁(GIL)GIL是什么为什么会有GILGIL的影响顺序执行的单线程(single_thread.py)同时执行的两个并发线程(multi_thread.py)当前GIL设计的
转一篇关于Python GIL的文章。 归纳一下,CPU的大规模电路设计基本已经到了物理意义的尽头,所有厂商们都开始转向多核以进一步提高性能。Python为了能利用多核多线程的的优势,但又要保证线程之间数据完整性和状态同步,就采用了最简单的加锁的方式(所以说Python的GIL是设计之初一时偷懒造成的!)。Python库的开发者们接受了这个设定,即默认Python是thread-safe,所以开始大量依赖这个特性,无需在实现时考虑额外的内存锁和同步操作。但是GIL的设计有时会显得笨拙低效,但是此时由于内
SeanCheney
2018/04/24
1.4K0
Python的全局解释器锁(GIL)GIL是什么为什么会有GILGIL的影响顺序执行的单线程(single_thread.py)同时执行的两个并发线程(multi_thread.py)当前GIL设计的
Python Web学习笔记之GIL机制下的鸡肋多线程
为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋? 有同学可能知道答案,因为 Python 中臭名昭著的 GIL。 那么 GIL 是什么?为什么会有 GIL?多线程真的是鸡肋吗? GIL 可以去掉吗?带着这些问题,我们一起往下看,同时需要你有一点点耐心。 多线程是不是鸡肋,我们先做个实验,实验非常简单,就是将数字 “1亿” 递减,减到 0 程序就终止,这个任务如果我们
Jetpropelledsnake21
2018/06/20
6180
对GIL的一些理解
python的代码执行由python虚拟机(也叫解释器主循环,CPython版本)来控制,python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行。即在任意时刻只有一个线程在解释器中运行。对python虚拟机访问的控制由全局解释锁GIL控制,正是这个锁来控制同一时刻只有一个线程能够运行。
步履不停凡
2019/09/11
6490
深入解析Python中的GIL(全局解释器锁)
在Python多线程编程中,GIL(全局解释器锁)是一个重要的概念。本文将深入解析GIL的定义、作用机制以及对多线程编程的影响。
疯狂的KK
2023/07/31
1.2K1
深入解析Python中的GIL(全局解释器锁)
Python 全局解释器锁(GIL):影响因素、机制与性能优化
在Python语言中,全局解释器锁(Global Interpreter Lock,简称GIL)是一个备受争议的话题。GIL是Python语言中特有的机制,对于多线程编程产生了一些限制。本文将深入探讨GIL的背景、作用、机制以及如何进行性能优化。
疯狂的KK
2023/07/31
1.4K1
Python 全局解释器锁(GIL):影响因素、机制与性能优化
相关推荐
Python - 多线程
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 上篇知识回顾:
  • 本篇概要
  • 一、watch侦听器
    • 1、介绍:
    • 2、方法格式的侦听器
    • 3、对象格式的侦听器
    • (1)使用
  • 二、计算属性
    • 1、介绍:
  • 三、Vue-cli的使用
    • 1、什么是Vue-cli?
    • 2、安装和使用
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档