Vue学习知识汇总

官网:https://cn.vuejs.org/

前置知识:

  1. 完整的学习vue: html + css、JavaScript、css3、HTML5、第三方库、网络通信、ES6+、webpack、模块化、包管理器、css预编译器
  2. 体验vue功能:html + css、JavaScript

Vue拥有以下特点:

  1. 渐进式
  2. 组件化
  3. 响应式

Vue的应用场景:

  1. 前台的部分页面
  2. 中后台的全部页面

使用vue的两种方式:

  1. 在页面中引入vue的js文件
  2. 脚手架
    • 官方脚手架vue-cli
    • 其他民间脚手架,如webpack-simple
    • 手动搭建

ES6知识补充:

  1. 速写属性
  2. 速写方法
  3. 模板字符串

注入

配置对象中的部分内容会被提取到vue实例中:

  1. data
  2. methods

该过程称之为注入,注入目的有两个:

  1. 完成数据响应式
  2. Vue是怎么知道数据被更改了?
  3. Vue2.0是通过Object.defineProperty方法完成了数据响应式
  4. Vue3.0是通过 Class Proxy完成了数据响应式
  5. 绑定this

虚拟DOM树

为了提高渲染效率,vue会把模板编译成虚拟DOM树,然后再生成真是的DOM

 当数据更改时,将重新编译成虚拟DOM树,然后对前后两棵树进行对比,仅将差异部分反映到真是DOM,这样既可最小程度的改动真实DOM,提升页面效率。

 

因此,对于vue而言,提升效率重点着眼于两个方面:

  1. 减少新的虚拟DOM的生成
  2. 保证对比之后,只有必要的节点有变化。

vue提供了多种方式生成虚拟DOM树:

  1. 在挂在的元素内部直接书写,此时将使用元素的outerHTML作为模板
  2. 在template配置中书写
  3. 在render配置中用函数直接创建虚拟节点树,此时,完全脱离模板,将省略编译步骤

 

这些步骤从上到下,优先级逐渐提升(render  >  template  >  outerHTML)

**注意︰虚拟节点树必须是单根的

 

挂载

将生成的真实DOM树,放置到某个元素位置,称之为挂载挂载的方式:

1.  通过el:"css选择器"进行配置

2.  通过vue实例.$mount("css选择器")进行配置

 

完整流程

  

 

指令

指令会影响元素的渲染行为,指令始终以v-开头基础指令∶

  • v-for: 循环渲染元素
  • v-html: 设置元素的innerHTML,该指令会导致元素的模板内容失效
  • v-on: 注册事件
    • 该指令由于十分常用,因此提供了简写 @
    • 事件支持一些指令修饰符(@click.prevent) ,如prevent,stop
    •  事件参数会自动传递
  • v-bind: 绑定动态属性
    • 该指令由于十分常用,因此提供了简写 :
  • v-show: 控制元素可见度
  • v-if、v-else-if、v-else: 控制元素生成
  • v-model: 双向数据绑定,常用于表单元素
    • 该指令是v-on和v-bind的复合版

 

进阶指令:

  v-slot、v-text、v-pre、v-cloak、v-once、自定义指令

特殊属性

最重要的特殊属性:key

该属性可以干预diff 算法,在同一层级,key值相同的节点会进行比较,key 值不同的节点则不会。

 

  在循环生成的节点中,vue强烈建议给与每个节点唯一且稳定的key值

 

其他特殊属性

  ref、is、slot、slot-scope、scope

计算属性

计算属性和方法的区别:

  1. 计算属性可以赋值,而方法不行
  2. 计算属性会进行缓存,如果依赖不变,则直接使用缓存结果,不会重新计算
  3. 凡是根据已有数据计算得到新数据的无参函数,都应该尽量写成计算属性,而不是方法

 

知识补充

  • 箭头函数
    • 任何可以书写匿名函数的位置均可以书写箭头函数
    • 箭头函数将会绑定this为函数书写位置的this值
  • 模块化
    • 没有模块化的世界: 全局变量污染、难以管理的依赖
    • 常见的模块化标准: CommonJS、ES6 Module、AMD、CMD、UMD

组件概念

一个完整的网页是复杂的,如果将其作为一个整体来进行开发,将会遇到下面的困难

  1. 代码凌乱臃肿
  2. 不易协作
  3. 难以复用

 

vue推荐使用一种更加精细的控制方案——组件化开发

所谓组件化,即把一个页面中区域功能细分,每一个区域成为一个组件,每个组件包含:

  1. 功能(JS代码)
  2. 内容(模板代码)
  3. 样式(CSS代码)

由于没有构建工具的支撑,CSS代码暂时无法放到组件中

组件开发

      创建组件

组件是根据一个普通的配置对象创建的,所以要开发一个组件,只需要写一个配置对象即可

该配置对象和vue实例的配置是几乎一样的

    

值得注意的是,组件配置对象和vue实例有以下几点差异:

    1. 无el
    2. data必须是一个函数,该函数返回的对象作为数据
    3. 由于没有el配置,组件的虚拟DOM树必须定义在template或render中

 

注册组件

         注册组件分为两种方式,一种是全局注册,一种是局部注册

全局注册

         一旦全局注册了一个组件,整个应用中任何地方都可以使用该组件

  

 

但在一些工程化的大型项目中,很多组件都不需要全局使用。

比如一个登录组件,只有在登录的相关页面中使用,如果全局注册,将导致构建工具无法优化打包因此,除非组件特别通用,否则不建议使用全局注册

局部注册

         局部注册就是哪里要用到组件,就在哪里注册

 

局部注册的方式是,在要使用组件的组件或实例中加入一个配置:

//这是另一个要使用my-comp的组件

组件树

一个组件创建好后,往往会在各种地方使用它。它可能多次出现在vue实例中,也可能出现在其他组件中。

于是就形成了一个组件树

 

向组件传递数据

         大部分组件要完成自身的功能,都需要一些额外的信息

比如一个头像组件,需要告诉它头像的地址,这就需要在使用组件时向组件传递数据

传递数据的方式有很多种,最常见的一种是使用组件属性component props

首先在组件中申明可以接收哪些属性:

在使用组件时,向其传递属性:

注意:在组件中,属性是只读的,绝不可以更改,这叫做单向数据流

Vue-cli的安装

         Vue-cli时一个脚手架的工具,它集成了诸多前端技术,包括但不仅限于:

  1. webpack
  2. babel
  3. eslint
  4. http-proxy-middleware
  5. typescript
  6. css pre-prosessor
  7. css module

 

  node和npm安装,npm install  -g @vue/cli安装vue-cli,查看vue --version版本。

       修改npm的registry源为国内的源,npm set registry  https://registry.npmmirror.com/

  运行服务  npm run serve

       编译打包  npm run build  生成dist目录中(服务器上放置dist目录下的文件)  

       云仓库保存项目,不需要上传node_modules目录,只需要根据package.json文件,使用npm install命令即可重新下载。

       vue.config.js是vue-cli配置文件,90%的配置都是webpack配置。

 

生命周期

 

开发通用组件

         组件使用slot标签,会将使用组件的内容时,传到组件slot插槽中。(多个slot,会重复内容)。

         可以在slot标签内设置属性name,使用slot时可以指定name的slot传内容。

         Style标签属性,scoped仅本文件使用。

         组件内的props属性内若需要默认Object,则需要default返回function(){ return {} }

自定义事件

         子组件的事件不能改变父级组件的事件,应该从父级往子级传递事件。

         组件内使用@click点击事件时,需要调用this.$emit(‘event’)方法,然后父级组件自定义@event事件进行监听。

 

 

 

posted @ 2024-05-14 13:09  Auler  阅读(33)  评论(0编辑  收藏  举报