vue2黑马

Vue3中的核心知识:ref与reactive响应式、CompositionAPI、customRef

vue3.0最大的核心就是Composition API

view文件一般存放需要路由跳变的组件,component一般存放普通组件

utils文件夹存放自己封装的工具类函数

Vue

是一套构建用户界面(往页面里填数据)的框架(现成的解决方案)

特性:

  • 数据驱动视图

  • 双向数据绑定

Vue的核心原理:MVVM

 ViewModel就是vue的实例

指令

1. 内容渲染指令

  1. v-text 指令的缺点:会覆盖元素内部原有的内容!

  2. {{ }} 插值表达式:在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容!

  3. v-html 指令的作用:可以把带标签的字符串,渲染成真正的 HTML 内容!

  4. v-pre 用于跳过元素和它的子元素的编译过程,显示原始的Mustache标签: 跳过不需要编译的节点,加快编译的速度;

  5. v-once 用于指定元素或者组件只渲染一次

  6. v-cloak  避免未编译到显示{{message}}后再解析成数据,编译结束后指令消失

2. 属性绑定指令:动态绑定属性、绑定一个对象

注意:插值表达式 {{ }} 只能用在元素的内容节点中,不能用在元素的属性节点中!

  • 使用 v-bind: 指令,为元素的属性动态绑定值;(单向绑定:仅数据渲染视图)

  • 语法糖 —— 冒号:

  • 在使用 v-bind 属性绑定期间,如果绑定内容需要进行动态拼接,则字符串的外面应该包裹单引号,例如:

    这是一个 div
  • 可以绑定 attribute 或者用于组件 prop 到表达式
  • :class=” {active:isActive}“     {类名:Boolean值,为true时绑定,否则失效}
  • 一般用来放对象{ },否则和绑定普通没区别:src=“ ”
  • :style=”[attr1, attr2]"   可以绑定多个CSS内联样式对象
  • :[name]="value"      动态绑定属性
  • v-bind=“info”   info{  name:’zxy‘,   age:18 }   绑定所有属性,用于组件原封不动

 data中的属性最好不要在data中的其他对象引用

CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 ’kebab-case‘来命名

vue2黑马_第1张图片

3. 事件绑定

  1. v-on: 简写是 @

  2. 语法格式为:

       //也可以传参add(n)
    ​
    methods: {
       //没有传参时,这里的e是鼠标事件   传参时被覆盖,引出$event
       add(e) {  //add:function()简写
                // 如果在方法中要修改 data 中的数据,可以通过 this 访问到
                //vm.count用this代替
                //vm === this为true
    
                this.count += 1;
    
                //e.target是触发事件的事件源  这里e为点击事件MouseEvent
                e.target.style.backgroundColor = 'red
       }
    }
    
    
    • $event(vue的内置变量) 的应用场景:如果默认的事件对象 e 被覆盖(需要传参时使用e)了,则可以手动传递一个 $event。例如:

      
      ​
      methods: {
         add(n, e) {
                  // 如果在方法中要修改 data 中的数据,可以通过 this 访问到
                  this.count += 1
         }
      }
    • 事件修饰符:

          .prevent  防止默认行为:链接跳转   

                                            链接

                                            原生:show(e){   

                                                                e.preventDefault();

                                                       }

          .stop         阻止冒泡 点击子对象时 冒泡到父对象,为了阻止父对象响应

                        

                                           原生:event.stopPropagation();

                        不常用:  

                                        .capture - 添加事件侦听器时使用 capture 模式。

                                        .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。

                                        .{keyAlias} - 仅当事件是从特定键触发时才触发回调。

                                        .once - 只触发一次回调。

                                        .left - 只当点击鼠标左键时触发。

                                        .right - 只当点击鼠标右键时触发。

                                        .middle - 只当点击鼠标中键时触发。

                                        .passive - { passive: true } 模式添加侦听器

                3. 按键修饰符

                             @submit.stop.prevent

                             @keyup = '  '     每次按下键盘都响应
                             @keyup.enter/13     键盘回车

                             @keyup.esc = ' '        

                             

4.双向绑定 v-model 指令

只能用于表单元素,div不行:

  1. input 输入框

  • type="radio"
  • type="checkbox"
  • type="xxxx"

        ​​​​​​ vue2黑马_第2张图片

      2. textarea

      3. select

        v-model的修饰符

vue2黑马_第3张图片

  •  input在设置value时数字为数字型,但是在页面手动输入后变为字符串
  •  input框接收空格,trim方法可以去除空格后接收数据
  •  input在更改数据时,迅速响应,影响性能,lazy当input失去焦点时再响应

5. 条件渲染指令:主要用于显示和隐藏

  1. v-show 的原理是:动态为元素添加或移除 display: none 样式,来实现元素的显示和隐藏

    如果要频繁的切换元素的显示状态,用 v-show 性能会更好

        (不支持template,不能和v-else一起用)

  1. v-if(常与template一起用,与v-else使用) 的原理是:每次动态创建或移除元素,实现元素的显示和隐藏

    如果刚进入页面的时候,某些元素默认不需要被展示,而且后期这个元素很可能也不需要被展示出来,此时 v-if 性能更好

在实际开发中,绝大多数情况,不用考虑性能问题,直接使用 v-if 就好了!!!

 vue是先把整个页面编译成js再渲染Dom结构


v-if 指令在使用的时候,有两种方式:

  1. 直接给定一个布尔值 true 或 false

    被 v-if 控制的元素

  2. 给 v-if 提供一个判断条件,根据判断的结果是 true 或 false,来控制元素的显示和隐藏

    良好

  3. 还可以和v-else一起使用(极少数用到v-else-if)

6. 列表渲染指令 v-for,可以结合template使用

vue2黑马_第4张图片

  •  可可以遍历数字 item in 10,数组用of,对象用in
  •  自己的title属性也可以使用列表渲染指令
  •  可以遍历对象,三个参数: "(value, key, index) in object";

官方解释:

  • 使用v-for,一定要绑定key属性,把id作为key的值(必须是字符串或数字类型)

  • key属性主要用在Vue的虚拟DOM算法,在新旧nodes对比时辨识VNodes
  • p如果不使用key,Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法
  • p而使用key时,它会基于key的变化重新排列元素顺序,并且会移除/销毁key不存在的元素

vue2黑马_第5张图片

vue2黑马_第6张图片

 ④input的check框和索引是相关联的,添加数组会造成选中框的混乱,而id是唯一的

vue2黑马_第7张图片

7.指令: 过滤器(仅vue2)

定义全局过滤器(常用):

Vue.filter(’名‘,function(过滤器前面的值){

        return 结果

}

调用:{{ message | fliter名}}

  • 把message作为参数通过 "管道符 |" 传给过滤器函数,返回的值再赋给message

vue2黑马_第8张图片

  •  过滤器(Filters)是 vue 为开发者提供的功能,常用于文本的格式化。(案例在下文)
  •  过滤器只能用在:插值表达式 {{ }}和 v-bind 属性绑定。

过滤器的注意点

  1. 要定义到 filters 节点下,本质是一个函数

  2. 在过滤器函数中,一定要有 return 值

  3. 在过滤器的形参中,可以获取到“管道符”前面待处理的那个值

  4. 如果全局过滤器和私有过滤器名字一致,此时按照“就近原则”,调用的是”私有过滤器“

私有过滤器和全局过滤器

直接定义filters ,称为“私有过滤器”,它只能在当前 vm 实例的 el 区域内使用。

全局过滤器实现获取时间并格式化

 vue2黑马_第9张图片

其他:

vue2黑马_第10张图片

传参,第一个被占用

vue2黑马_第11张图片

watch 侦听器

监视数据的变化,做特定的操作。 

侦听data中数据的变化,且进行一些逻辑处理,比如网络请求

一般不侦听计算属性

newvalue和oldvalue打印出一个proxy

 应用场景: 

注册用户判断是否被占用    newVal为空时会报错,所以加一个if

vue2黑马_第12张图片

方法二:

vue2黑马_第13张图片

侦听器的格式

 1、方法格式的侦听器

参数新值在前,旧值在后

vue2黑马_第14张图片

  • 缺点1:无法在刚进入页面的时候,自动触发!!!只有在数据变化时触发

  • 解决:immediate

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

  • 解决:deep,但是改为newvalue无法获取对象oldvalue的值,因为引用类型获取的是地址(解决:深拷贝一份放入data)

vue2黑马_第15张图片

 2对象格式的侦听器(常用)

  • 好处1:可以通过 immediate 选项,让侦听器在页面初次渲染好自动触发!!!

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

如果 watch 侦听的是一个对象,对象中的属性值发生变化,此时使用deep

handle是固定函数

vue2黑马_第16张图片

方法二:vue3文档删掉了

vue2黑马_第17张图片

 实现立即触发 :对象格式 + immediate

vue2黑马_第18张图片

 data数据为对象时vue2黑马_第19张图片

vue2黑马_第20张图片

不常用的另一种写法:

在watch中    a:“someMethod”,someMethod是写在methods的方法,相当于把watch写在methods

不常用的另一种写法:数组帮助多个函数逐个调用

vue2黑马_第21张图片

另一种API:$watch

1、第一个参数是要侦听的源;

2、第二个参数是侦听的回调函数callback;

3、第三个参数是额外的其他选项,比如deep、immediate;

 vue2黑马_第22张图片

 这里的箭头函数内部的this没有问题,因为箭头函数是去上层作用域找this,找到的是created函数,函数在js中是有自己的作用域的,所以内部的this相当于调用的this,不会出现问题

如果在created中给侦听器赋值,可以调用,有取消的作用

vue2黑马_第23张图片

 

 

 

 

 

 

 

计算属性computed

  • 声明:声明的是一个函数
  • 调用:当作普通属性使用,在