首页 > 其他分享 >vue学习笔记

vue学习笔记

时间:2024-04-03 09:00:50浏览次数:21  
标签:----------- vue 函数 vm 笔记 学习 Vue 组件 data

学习vue之前需要掌握的:
ES6语法规范
ES6模块化
原型、原型链
数组常用方法
axios
promise
==============
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。
2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,
这样this的指向才是vm 或 组件实例对象。
-----------
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
-----------
插值语法可以调用的数据包括:data、props和computed
利用插值语法还可以调用method里的方法,如:<span>{{fullName()}}</span>
-----------
注意区分:js表达式 和 js代码(语句)
1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:
(1). a
(2). a+b
(3). demo(1)
(4). x === y ? 'a' : 'b'

2.js代码(语句)
(1). if(){}
(2). for(){}
-----------
1.单向绑定(v-bind):数据只能从data流向页面。
2.双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。
备注:
1.双向绑定一般都应用在表单类元素上(如:input、select等)
2.v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。
-----------
2.data有2种写法
(1).对象式
(2).函数式
如何选择:目前哪种写法都可以,以后学习到组件时,data必须使用函数式,否则会报错。
3.一个重要的原则:
由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。
-----------
事件的基本使用:
1.使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名;
2.事件的回调需要配置在methods对象中,最终会在vm上;
3.methods中配置的函数,不要用箭头函数!否则this就不是vm了;
4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象;
5.@click="demo" 和 @click="demo($event)" 效果一致,但后者可以传参;

<button @click="showInfo1">点我提示信息1(不传参)</button>
<button @click="showInfo2($event,66)">点我提示信息2(传参)</button>
methods:{
showInfo1(event){
// console.log(event.target.innerText)
// console.log(this) //此处的this是vm
alert('同学你好!')
},
showInfo2(event,number){
console.log(event,number)
// console.log(event.target.innerText)
// console.log(this) //此处的this是vm
alert('同学你好!!')
}
}
-----------
计算属性:
1.定义:要用的属性不存在,要通过已有属性计算得来。
2.原理:底层借助了Objcet.defineproperty方法提供的getter和setter。
3.get函数什么时候执行?
(1).初次读取时会执行一次。
(2).当依赖的数据发生改变时会被再次调用。
4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便。
5.备注:
1.计算属性最终会出现在vm上,直接读取使用即可。
2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。
-----------
computed和watch之间的区别:
1.computed能完成的功能,watch都可以完成。
2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。
-----------
绑定样式:
1. class样式
写法:class="xxx" xxx可以是字符串、对象、数组。
字符串写法适用于:类名不确定,要动态获取。
对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。
数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。
2. style样式
:style="{fontSize: xxx}"其中xxx是动态值。
:style="[a,b]"其中a、b是样式对象。
-----------
v-if 适用于:切换频率较低的场景。
特点:不展示的DOM元素直接被移除
v-show 适用于:切换频率较高的场景。
特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

<!-- v-if与template的配合使用 -->
<template v-if="n === 1">
<h2>你好</h2>
<h2>尚硅谷</h2>
<h2>北京</h2>
</template>

-----------
3. 用index作为key可能会引发的问题:
1. 若对数据进行:逆序添加、逆序删除等破坏顺序操作:
会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。

2. 如果结构中还包含输入类的DOM:
会产生错误DOM更新 ==> 界面有问题。

4. 开发中如何选择key?:
1.最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。
2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,
使用index作为key是没有问题的。
-----------
Vue监视数据的原理:
1. vue会监视data中所有层次的数据。

2. (1)对象中后追加的属性,Vue默认不做响应式处理
(2).如需给后添加的属性做响应式,请使用如下API:
Vue.set(target,propertyName/index,value) 或
vm.$set(target,propertyName/index,value) 或
this.$set(target,propertyName/index,value)
如:
this.$set(this.student,'sex','男')
4.在Vue修改数组中的某个元素一定要用如下方法:
1.使用这些API(变更方法,即会修改原始数组):push()、pop()、shift()、unshift()、splice()、sort()、reverse()
2.Vue.set() 或 vm.$set()
如:
this.student.hobby.splice(0,1,'开车')
Vue.set(this.student.hobby,0,'开车')
this.$set(this.student.hobby,0,'开车')
特别注意:Vue.set() 和 vm.$set() 不能给vm 或 vm的根数据对象 添加属性!!!
5、数组的filter()、concat()、slice()属于非变更方法,不会修改原始数组,总是返回一个新数组
-----------
ref
1. 作用:用于给节点打标识
2. 读取DOM元素或子组件实例对象:this.$refs.xxxxxx
-----------
收集表单数据:
若:<input type="text"/>,则v-model收集的是value值,用户输入的就是value值。
若:<input type="radio"/>,则v-model收集的是value值,且要给标签配置value值。
若:<input type="checkbox"/>
1.没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)
2.配置input的value属性:
(1)v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)
(2)v-model的初始值是数组,那么收集的的就是value组成的数组
备注:v-model的三个修饰符:
lazy:失去焦点再收集数据
number:输入字符串转为有效的数字
trim:输入首尾空格过滤
-----------
过滤器:
定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)。
语法:
1.注册过滤器:Vue.filter(name,callback) 或 new Vue{filters:{}}
2.使用过滤器:{{ xxx | 过滤器名}} 或 v-bind:属性 = "xxx | 过滤器名"
备注:
1.过滤器也可以接收额外参数、多个过滤器也可以串联
2.并没有改变原本的数据, 是产生新的对应的数据
-----------
v-cloak 指令(没有值):
1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。
-----------
v-once指令:
1.v-once所在节点在初次动态渲染后,就视为静态内容了。
2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。
-----------
v-pre 指令:
1.跳过其所在节点的编译过程。
2.可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译。
-----------
Vue完成模板的解析并把初始的真实DOM元素放入页面后(挂载完毕)调用mounted
常用的生命周期钩子:
1.mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
2.beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。
# this.$off('atguigu') PubSub.unsubscribe(pid)
一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。
-----------
4.关于this指向:
(1).组件配置中:
data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。
(2).new Vue(options)配置中:
data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。

5.VueComponent的实例对象,以后简称vc(也可称之为:组件实例对象)。
Vue的实例对象,以后简称vm。
-----------
props的优先级更高,利用props传过来的值不能修改
props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。
v-model绑定的值不能是props传过来的值,因为props是不可以修改的!
-----------
存储内容大小一般支持5MB左右(不同浏览器可能还不一样
SessionStorage存储的内容会随着浏览器窗口关闭而消失。
LocalStorage存储的内容,需要手动清除才会消失。
-----------
查看依赖包都有哪些版本:cnpm view less-loader versions
安装指定版本:cnpm i less-loader@7
-----------ES6中的知识:
接收不定长参数,params是一个数组
getStudentName(name,...params){
console.log('App收到了学生名:',name,params)
this.studentName = name
}
调用:
sendStudentlName(){
//触发Student组件实例身上的atguigu事件
this.$emit('atguigu',this.name,666,888,900)
}
-----------
绑定自定义事件:适用于子组件向父组件传递信息

1. 第一种方式,在父组件中:```<Demo @atguigu="test"/>``` 或 ```<Demo v-on:atguigu="test"/>```
2. 第二种方式,在父组件中:

```js
<Demo ref="demo"/>
......
mounted(){
this.$refs.xxx.$on('atguigu',this.test)
}
```

3. 若想让自定义事件只能触发一次,可以使用```once```修饰符,或```$once```方法。

4. 触发自定义事件:```this.$emit('atguigu',数据)```

5. 解绑自定义事件```this.$off('atguigu')```

6. 组件上也可以绑定原生DOM事件,需要使用```native```修饰符。

7. 注意:通过```this.$refs.xxx.$on('atguigu',回调)```绑定自定义事件时,回调<span style="color:red">要么配置在methods中</span>,<span style="color:red">要么用箭头函数</span>,否则this指向会出问题!
-----------
全局事件总线(GlobalEventBus)

1. 一种组件间通信的方式,适用于 任意组件间通信

2. 安装全局事件总线:

```js
new Vue({
......
beforeCreate() {
Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
},
......
})
```

3. 使用事件总线:

1. 接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的<span style="color:red">回调留在A组件自身。</span>

```js
methods(){
demo(data){......}
}
......
mounted() {
this.$bus.$on('xxxx',this.demo)
}
```

2. 提供数据:```this.$bus.$emit('xxxx',数据)```

4. 最好在beforeDestroy钩子中,用$off去解绑<span style="color:red">当前组件所用到的</span>事件。
-----------
----------------------
-----------
-----------
-----------
-----------
-----------
-----------

标签:-----------,vue,函数,vm,笔记,学习,Vue,组件,data
From: https://www.cnblogs.com/testzcy/p/18111892

相关文章

  • vue学习笔记2
    学习vue之前需要掌握的:ES6语法规范ES6模块化原型、原型链数组常用方法axiospromise==============1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm或组件实例对象。2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数, ......
  • Java登陆第三十六天——VUE3响应式入门、setup语法糖
    当浏览器接收到服务端返回的页面后,浏览器会把页面解析成DOM树,DOM树中各个元素会相应的显示在浏览器上。VUE提供的响应式数据可以在页面不刷新的情况下更新数据。响应式数据App.vue<script>//等价于setup语法糖。固定的写法,不会改。exportdefault{setup(){letsum......
  • Machine Learning机器学习之文本分析的知识图谱(详细讲解)
    目录前言历史:概念思想:知识图谱主要发展历程:知识图谱重要组成部份和特征:知识图谱案列(关于学院、课程、学生):一、知识图谱的存储 二、知识图谱的构建过程 数据层:模式层(构建模式与概念本体设计):三、知识图谱的分析四、知识图谱应用 基于知识图谱应用于电商领域:1.......
  • Machine Learning机器学习之文本分析的词法分析、句法分析、语义分析(详细讲解)
    目录前言词法分析:词义消歧:句法分析:语义分析:文本分析应用1、文本分类:设计过程:代码实现:完整代码: 2、情感分析:总结博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯......
  • 0基础学习Mybatis系列数据库操作框架——增删改操作
    大纲新增Mapper配置代码Mapper接口文件应用删除简单方案Mapper配置代码高级方案Mapper配置代码Mapper接口文件应用完整代码修改Mapper配置代码Mapper接口文件应用在《0基础学习Mybatis系列数据库操作框架——目录结构》一文中,我们已经搭建了查询操作的框架。......
  • javaweb学习(day11-监听器Listener&&过滤器Filter)
    一、监听器Listener1 Listener介绍Listener监听器它是JavaWeb的三大组件之一。JavaWeb的三大组件分别是:Servlet程序、Listener监听器、Filter过滤器Listener是JavaEE的规范,就是接口监听器的作用是,监听某种变化(一般就是对象创建/销毁,属性变化),触发对应方......
  • 大一下 计算系统基础笔记:原码的一位乘法 20240402
    W61.原码的一位乘法原码的一位乘法可以通过以下步骤进行:1.确定乘法的两个操作数,并将它们转换为原码表示。2.对两个操作数的每一位进行相乘,得到部分积。3.将所有的部分积相加,得到最终的乘积。具体的步骤如下:假设有两个操作数A和B,都用原码表示,长度为n位。1.确定符号位:根据A......
  • gdscript学习笔记3-标识符
    任何仅限于字母字符(a到z和A到Z),数字(0到9)和_的字符串都可以作为标识符.此外,标识符不能以数字开头.标识符区分大小写(foo和FOO是不同的).extendsNode2Dvarabc="aaaa"varAbc="bbb"var_abc="ccc"varabc222="ddd"#var222abc="eee"......
  • C++提高学习笔记
    C++提高学习笔记面向对象设计的基本概念面向对象的分析(OOA):解析出需求,需要做什么面向对象的设计(OOD):需要设计哪些类,类中有哪些数据成员,哪些成员函数,类与类之间的关系面向对象的变成(OOP):将需求与设计转换为代码UML语言:同一建模语言类与类之间的关系......
  • SQL相关笔记-不常用 容易忘记的一些语法规则记录
    1.查下表中只有一条的数据SELECTuserId,count(userId)FROM表名GROUPbyuserId2. 根据userId去重selectdistinctuserIdfrom表名3.查询数据库中含有某个字段的所有表名selectDISTINCTTABLE_NAMEfrominformation_schema.`COLUMNS` whereTABLE_SCHEMA='数......