Vue2的学习

news2024/11/26 14:48:17

computed计算属性

概念

基于现有数据,计算出来的新属性,依赖的数据变化,会自动重新计算

语法

  • 声明在computed配置项中,一个计算属性对应一个函数
  • 这是一个属性{{计算属性名}},不是方法
  • 注意不要忘记return
<body>
<div id="app">
    <ul>
        <li v-for="arr in list">{{arr.name}}&nbsp&nbsp&nbsp&nbsp&nbsp个数:{{arr.num}}个</li>
    </ul>
    <p>礼物总数:{{totalCount}}</p>
</div>
<script src="../lib/vue.js"></script>
<script>
    const app=new Vue({
        el:'#app',
        data:{
            list:[
                {id:1,name:'篮球',num:1},
                {id:2,name:'玩具',num:2},
                {id:3,name:'铅笔',num:5}
            ]
        },
        computed:{
            totalCount(){
                console.log(this.list)
                let total=this.list.reduce((sum,item)=>sum+item.num,0)
                return total
            }
        }
    })
</script>
</body>

computed计算属性与methods方法的区别

  • computed计算属性

作用:封装一段对于数据的处理,得一个结果

语法:写在computed配置项中,作为属性,直接使用this.计算属性{{计算属性}}

  • methods方法

作用:给试了提供一个方法,调用来处理业务逻辑

语法:写在methods配置项中,作为方法,需要调用this.方法名()   {{方法名()}}   @事件名="方法名"

计算属性完整写法

username:{
    get(){
        return this.firstName+this.lastName
    },
    set(){}
}

上一段代码和下面这一段简写的代码等价:

username(){
    return this.firstName+this.lastName
}

完整属性是再加上set()

<body>
  <div id="app">
    姓:<input type="text" v-model="firstName">+名:<input type="text" v-model="lastName">={{username}}<br>
      <button @click="changeName">改名</button>
  </div>
  <script src="../lib/vue.js"></script>
  <script>
      const app=new Vue({
          el:'#app',
          data:{
              firstName:'刘',
              lastName:'备'
          },
          methods:{
              changeName(){
                  console.log('点击')
                  this.username='吕xiao布'
              }
          },
          computed:{
              username:{
                  get(){
                      return this.firstName+this.lastName
                  },
                  set(value){
                      this.firstName=value.slice(0,1)
                      this.lastName=value.slice(1)
                  }
              }
          }
      })
  </script>
</body>

补充

阻止默认行为,并设置点击事件:@click.prevent=""

<td @click.prevent="del(arr.id)"><a href="https://www.baidu.com/">删除</a></td>
methods:{
    del(id){
        this.list=this.list.filter(arr=>arr.id!=id)
    }
}

此时就不会默认进入百度的页面,而是执行del(id)方法

相除保留几位小数(被除数不能为零)

10/this.list.length.toFixed(2)    //保留两位小数

局部样式

<style scoped>

  }
</style>

scoped原理:css选择器都会被添加上一个自定义属性(date-v-hash值)

watch监视器

作用

监视数据变化,执行一些业务逻辑或异步操作

语法

  • 简单写法:简单配置项,直接监视
  • 完整写法:添加额外配置项
    • deep:true 对复杂类型深度见识
    • immediate:true 初始化立刻执行一次handler方法

方法名是不能出现特殊字符的

那么对于list.num的监听,要如何写?

data:{
    words1:'',
    obj:{
        words2:''
    }
},
watch:{
    words1(newValue,oldValue){
      console.log('变',newValue,oldValue)
    },
    'obj.word2'(newValue,oldValue){
        console.log('变',newValue,oldValue)
    }
}

加上'',此时就可以监听到obj.words2了

简单写法 

<-简单写法->
<body>
  <div id="app">
     <div>
         <input type="text" v-model="obj.words">
     </div>
    <div>
        <input type="text" v-model="result">
    </div>
  </div>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script src="../lib/vue.js"></script>
  <script>
     const app=new Vue({
       el:'#app',
       data:{
           obj:{
               words:''
           },
           result:'',
           timer:null//延时器id
       },
       watch:{
           'obj.words'(newValue){
               //防抖处理,延时执行
               clearTimeout(this.timer)
               this.timer=setTimeout(async()=>{
                   console.log('变',newValue)
                   const res=await axios({
                       url:'https://applet-base-api-t.itheima.net/api/translate',
                       params:{
                           words: newValue
                       }
                   })
                   this.result=res.data.data
                   console.log(res.data.data)
               },300)
           }
       }
     })
  </script>
</body>

完整写法

   data:{
           obj:{
               words:'',
               lang:'italy'
           },
           result:'',
           timer:null//延时器id
       },
       watch:{
           obj:{
               deep:true,
               immediate:true,
               handler(newValue){
                       clearTimeout(this.timer)
                       this.timer=setTimeout(async()=>{
                           console.log('变',newValue)
                           const res=await axios({
                               url:'https://applet-base-api-t.itheima.net/api/translate',
                               params:newValue
                           })
                           this.result=res.data.data
                           console.log(res.data.data)
                       },300)
                   }
               }
           }
     })

此时监控了两个值的变化,一个是选择语言——obj.lang,还有输入框的变化——obj.words。

其中immediate:true是立刻执行,即使没有发生变化,也会执行一遍,这条语句可省。

生命周期

Vue生命周期:一个Vue实例从创建到销毁的整个过程

  • 创建阶段(响应式数据)
  • 挂载阶段(渲染模板)
  • 更新阶段(数据修改,更新视图)
  • 销毁阶段(销毁实例)

生命周期过程中,会自动运行一些函数,被称为【生命周期钩子】=>让开发者可以在【特定阶段】运行自己的代码

工程化开发&脚手架Vue CLI

基本介绍

Vue CLI是Vue官方提供的一个全局命令工具,可以快速创建一个开发Vue项目的标准化基础架子

使用步骤

  • 创建项目架子:vue create project-name(项目名不能用中文名)
  • 启动项目:yarn server或npm run serve(找package.json)

组件化开发&根组件

  • 组件化:一个页面可以拆分为一个个组件,每个组件有着自己独立的结构、样式、行为。好处:便于维护,利于复用,提升开发效率
  • 组件分类:普通组件、根组件
  • 根组件:整个应用最上层的组件,包裹所有普通组件

  • template结构(在vue2中只能有一个根结点)
  • style样式(可以支持less,需要装包less和less-loader)
  • script行为

普通组件的注册使用

注册的两种方式;

  • 局部注册:只能在注册内的组件内使用

    • 创建.vue文件(三个组成部分)
    • 在使用的组件内导入并注册
import Vue from '.vue文件路径'
import App from './components/HmHeader'

export default{
  //局部注册
  component:{
    '组件名':组件对象,
    HmHeader:HmHeader
  }
}

使用:当成html标签使用`<组件名></组件名>`

注意:组件名规范(大驼峰命名法)

  • 全局注册:所有组件内都能使用

    • 创建.vue文件(三个组成部分)
    • main.js中进行全局注册
//导入需要全局注册的组件
import HmButton from './components/HmButton'
//调用Vue.component进行全局注册
//Vue.component('组件名',组件对象)
Vue.component('HmButton',HmButton)

使用:当成html标签使用`<组件名></组件名>`

组件通信

父子关系(props和$emit)

什么是prop

  • prop定义:组件上注册的一些自定义属性
  • prop作用:向子组件传递数据

特点

  • 可以传递任意数量的prop
  • 可以传递任意类型的prop

有时需要props校验,不符合要求会出现错误提示

  • 类型校验
  • 非空校验
  • 默认值
  • 自定义校验
props:{
  校验的属性名: {
    type:类型,
    required:true,//是否必填
    default:默认值,//默认值
    validator(value){
      //自定义校验逻辑
      return 是否通过校验
    }
  }
},

prop和data的比较

共同点:都可以给组件提供数据

区别:

  • data的数据是自己的,可以随便改
  • prop的数据是外部的,要遵循单向数据流(谁的数据谁负责)

非父子关系(eventbus)

作用:非父子组件之间,进行建议消息传递(复杂场景->Vue)

1.创建一个都能访问到的事件总线(空Vue实例)->utils/EventBus.js

2.A组件(接收方),监听Bus实例的事件 

3.B组件(发送方),触发Bus实例的事件 

非父子关系(provide&inject)

作用:跨层级共享数据

1.父组件provide提供数据

export default{
    provide(){
      return{
        //普通类型【非响应式】
        color:this.color,
        //复杂类型【响应式】
        userinfo:this.userInfo
      }
    }
  }

2.子/孙组件inject取值使用

export default{
  inject:['color','userInfo'],
  created(){
    console.log(this.color,this.userInfo)
  }
}

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

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

相关文章

无涯教程-JavaScript - ROW函数

描述 ROW函数返回引用的行号。 语法 ROW ([reference]) 争论 Argument描述Required/OptionalReference 您想要其行号的单元格或单元格范围。 如果省略引用,则假定它是出现ROW函数的单元格的引用。 请参阅下面的注释。 Optional Notes 如果引用是一个单元格范围,并且如果将…

【RTOS学习】单片机中的C语言

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 本喵默认各位小伙伴都会C语言&#xff0c;我们平时学习C语言都是在Windows环境下学习的&#xff0…

事半功倍,必看这4个Pandas神器

Pandas是我们日常处理表格数据最常用的包&#xff0c;但是对于数据分析来说&#xff0c;Pandas的DataFrame还不够直观&#xff0c;所以今天我们将介绍4个和Pandas相关的Python包&#xff0c;可以将Pandas的DataFrame转换交互式表格&#xff0c;让我们可以直接在上面进行数据分析…

【电子元件】常用电子元器件的识别之霍尔元件

目录 1. 霍尔元件的结构与特点1.1 霍尔元件的组成结构1.2 霍尔元件的霍尔效应 2. 霍尔元件的图形符号与型号2.1 1.图形符号2.2 2.型号说明 3. 半导体霍尔效应的原理3.1 半导体中的左手定则3.2 P型半导体霍尔效应的原理3.3 N型半导体霍尔效应的原理 4. 霍尔元件的电势计算与工作…

RabbitMQ深入 —— 交换机

前言 在这篇文章中&#xff0c;荔枝围绕交换机梳理RabbitMQ中交换机相关知识&#xff0c;主要包括&#xff1a;扇出交换机、直接交换机、主题交换机&#xff0c;根据不同的交换机引出相应的RabbitMQ模式。同样的本篇文章也是主要围绕如何通过交换机定向群体发送消息这一个问题来…

澳洲硕士申请QA

Q&A 申请一般问题 澳洲申请时间 澳洲分2月跟7月开学&#xff0c;不分rolling。随时申请&#xff0c;截止日期前申请就行&#xff0c;&#xff08;具体时间官网有写&#xff09; 研究生学位时长 它整体的要求一般就是如果说你要申请的这个专业是本专业&#xff0c;那他…

分类预测 | Matlab实现基于MIC-BP-Adaboost最大互信息系数数据特征选择算法结合Adaboost-BP神经网络的数据分类预测

分类预测 | Matlab实现基于MIC-BP-Adaboost最大互信息系数数据特征选择算法结合Adaboost-BP神经网络的数据分类预测 目录 分类预测 | Matlab实现基于MIC-BP-Adaboost最大互信息系数数据特征选择算法结合Adaboost-BP神经网络的数据分类预测效果一览基本介绍研究内容程序设计参考…

Linux内核中断机制

什么是中断&#xff1f; 中断是一种打断程序的正常执行流程的事件&#xff0c;这种事件以电信号的形式出现&#xff0c;可以由硬件设备或者CPU本身生成。 在中断发生后&#xff0c;正常的执行流被立即中止&#xff0c;转而执行中断处理程序(handler)。中断处理完成之后&#…

IT运维:使用数据分析平台监控Windows Eventlog

TIPS&#xff1a;本文鸿鹄版本&#xff1a;2.10.0及以上版本 概述 本文基于《IT运维&#xff1a;利用鸿鹄采集Windows event log数据》&#xff08;以下简称原文&#xff09;文章进行了细化与延伸。主要包括细化了安装步骤&#xff0c;增加了仪表板。 鸿鹄端配置 创建数据集与数…

[Linux入门]---搭建Linux环境

1.Linux环境的搭建方式 使用Linux操作系统的三种途径&#xff1a; 1.直接安装在物理机上&#xff0c;但是由于 Linux 桌面使用起来非常不友好&#xff0c;不推荐。 2.使用虚拟机软件&#xff0c;将 Linux 搭建在虚拟机上&#xff0c;但是由于当前的虚拟机软件(如 VMWare 之类的…

科研生产力:Zotero

目录 Zotero安装配置Zotero常用插件1. Zotero Connector2. Jasminum-茉莉花插件3. Zotero-scihub4. Zotero-pdf-translate5. Zotero-if6. Zotero-style7. Zotero-tag8. ZotFile9. zotero-better-notesZotero GPT 一些学习资源 Zotero安装配置 进入Zotero官网&#xff1a;https:…

前端用户体验设计:创造卓越的用户界面和交互

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 用户体验&#xff08;Us…

Softek Barcode Reader Toolkit 9.3 Crack

现在使用 Pdfium 读取 PDF 文件并改进了对 QRCode、PDF417 和 Code 39 的支持。 2023 年 9 月 11 日 - 16:32新版本 特征 现在使用 Pdfium 读取 PDF 文件。 提高了 GetBarStringPos 返回值的准确性。 如果 PDF417 条形码包含超过数据字节计数的符号长度描述符&#xff0c;则它会…

透视俄乌网络战之二:Conti勒索软件集团(下)

透视俄乌网络战之一&#xff1a;数据擦除软件 透视俄乌网络战之二&#xff1a;Conti勒索软件集团&#xff08;上&#xff09; Conti勒索软件集团&#xff08;下&#xff09; 1. 管理面板源代码2. Pony凭证窃取恶意软件3. TTPs4. Conti Locker v2源代码5. Conti团伙培训材料6. T…

SAP 信息类型:使用 PA30,PA20 创建,更改,复制,删除,概览

目录 创建信息类型 显示信息类型 更改信息类型 复制信息类型 删除信息类型 显示信息类型概述 创建信息类型 步骤 1&#xff09;在 SAP 命令提示符下&#xff0c;输入事务 PA30 步骤 2&#xff09;在下一个 SAP 屏幕中&#xff0c; 输入人员编号点击输入按钮 选择相关的…

SaaS软件能保证数据安全吗?

SaaS软件能保证数据安全吗&#xff1f; 本文将要尝试从各个方面尽可能客观的去阐述这个问题&#xff0c;而不是简单自嗨式的说简道云平台如何保障数据安全。 建议先收藏起来慢慢品&#xff01; 01 SaaS安全到底是什么&#xff1f;——定义解读 本文所用SaaS平台>>>…

VR航天航空巡展VR科技馆航天主题科普设备沉浸遨游太空

每当飞机飞过头顶&#xff0c;我们总是忍不住抬头去仰望。从嫦娥奔月的神话传说&#xff0c;到莱特兄弟实现了上天翱翔的梦想&#xff0c;人类一直在不断探索更辽阔的天空和浩瀚的宇宙。 航空科普 寻梦而行 普乐蛙VR航天航空巡展&#xff0c;正在湖南郴州如火如荼的进行中&…

el-dialog窗口添加滚动条

0 效果 1 代码 /deep/.addMicroDialog {height: 700px !important;overflow-y: scroll;}/deep/.addMicroDialog:hover::-webkit-scrollbar-thumb {background: #9cbaff;border-radius: 10px;}/deep/.addMicroDialog::-webkit-scrollbar {width: 6px;height: 0px;}

R--基础知识总结

R程序包的安装和加载 install.packageS(TSA) library(TSA) R向量 (vector) 数值向量 1.赋值 x<-c(1,2,3,4)assign( x,c(1,2,3,4))xc(1,2,3,4)x<-2*1:15 % x(2,4,...,30) 等差运算优先于乘法运算seq(fromvalue1,tovalue2,byvalue3) seq(length…

golang iris框架 + linux后端运行

go mod init myappgo get github.com/kataras/iris/v12latestpackage mainimport "github.com/kataras/iris/v12"func main(){app : iris.New()app.Listen(":port") }打包应用 go build main.go开启服务 #nohup ./程序名称 nohup ./main关闭后台 #ps -e…