随记 VUE

背景知识:

node.js的设计模式:MVC

angular 2009 => react 2013(facebook) => vue 2014(尤雨溪)

随记 VUE_第1张图片

vue :用于构建用户界面的渐进式JavaScript框架 / 数据驱动视图

vue的高级功能:解耦试图和数据、可复用的组件、前端路由技术vue-router、状态管理vuex、虚拟DOM

开发步骤:

引入包 -> 创建实例化对象( el, data[数据属性 => 既可以是对象,也可以是一个函数],  template )->

 

小记:

1. 模板语法{{ }} 双大括号插值 => 赋值、计算、dom操作

2. 如果template中定义了内容,那么优先加载template;如果没有定义内容,则加载的是#app(el绑定的)模板

3. 除了数据属性,vue实例还暴露了一些有用的实例属性和方法,它们都有前缀$ (vm.$el   vm.$data)

4. 数据驱动视图(数据发生改变时,视图也发生改变)

5. MVC模型: 数据不是主动的改变到视图上,是靠控制器(controller)取到数据模型(model)展示到视图view

6.MVVM模型:Model View ViewModel

随记 VUE_第2张图片

7. v-model指令 

绑定数据源,将数据绑定在特定的表单上,可以容易实现数据的双向绑定

只能应用在有value属性的时候,例如input

其实是语法糖,它是v-bind:value 和 v-on:input的体现

随记 VUE_第3张图片

9.、简写

 随记 VUE_第4张图片

9. vue组件

随记 VUE_第5张图片

10. 局部组件的使用:声子 挂子 用子 (声明局部组件,挂载组件,使用组件)

注意:建议组件的首字母大写,且是驼峰命名。子组件的data返回的必定是函数。

11. 全局组件

随记 VUE_第6张图片

随记 VUE_第7张图片

12. 组件之间的通信

随记 VUE_第8张图片

01. 父组件通过prop往子组件通信

父组件先绑定自定义属性 -> 在子组件中使用props接收父组件传递的数据 -> 在子组件中任意使用父组件传递的数据

随记 VUE_第9张图片

02. 子组件通过事件向父组件通信

在父组件中绑定自定义事件 -> 在子组件中触发原生的事件,在函数中使用 $emit 触发自定义的事件

$emit 有两个参数,第一个是自定义的事件名,第二个是传递的参数

随记 VUE_第10张图片

随记 VUE_第11张图片

13. 插槽

Vue提供的内置的全局组件,作为承载分发内容的出口

实例:自定义封装类似于element中的按钮

随记 VUE_第12张图片

随记 VUE_第13张图片

14. 具名插槽

随记 VUE_第14张图片

15. 过滤器

作用:为页面中的数据进行装饰

类型:局部过滤器、全局过滤器

局部过滤器:不需要直接创建,只需要声明过滤器 -> 使用过滤器 {{ 数据 | 过滤器的名字 }}  ( ‘|’ 属于管道符 )

随记 VUE_第15张图片

全局过滤器

随记 VUE_第16张图片

当需要传值的时候

随记 VUE_第17张图片

16. watch的使用

简单数据类型:

随记 VUE_第18张图片

复杂数据类型:Object Array 

随记 VUE_第19张图片

总结:watch 监听的是基础数据类型(简单监视),复杂数据类型要深度监视。

17. 计算属性

计算属性默认只有getter,内部要有返回值

随记 VUE_第20张图片

随记 VUE_第21张图片

18. 计算属性setter

随记 VUE_第22张图片

随记 VUE_第23张图片

19. 组件的生命周期

随记 VUE_第24张图片

随记 VUE_第25张图片    随记 VUE_第26张图片

随记 VUE_第27张图片

组件销毁之前、组件销毁之后

vue的内置指令中,v-if切换会影响组件的创建和销毁。

为了避免组件切换重复渲染DOM,因为必须使用将组件包起来

当把组件缓存起来之后,就不会调用到这两个生命周期

随记 VUE_第28张图片

在切换缓存的组件的时候,会触发到这两个生命周期

随记 VUE_第29张图片

20. Vue的内置组件,能在组件切换的时候,可以将状态保存在内存中,防止重复渲染DOM

随记 VUE_第30张图片

21. vue组件通信的方式

      01. 父子组件嵌套一层:props 和 $emit

随记 VUE_第31张图片

      02. 组件嵌套多层:$attrs 和 $listeners

随记 VUE_第32张图片

我们只是想把A组件的信息传递给C组件,如果使用props 绑定来进行信息的传递,虽然能够实现,但是代码并不美观。

在vue2.4中,为了解决该需求,引入了$attrs 和$listeners , 新增了inheritAttrs 选项。

inheritAttrs的默认值为true, 将inheritAttrs的值设为false, 这些默认的行为会禁止掉。但是通过实例属性$attrs ,可以将这些特性生效,且可以通过v-bind 绑定到子组件的非根元素上。

vue2.4版本新增了$listeners 属性,我们在b组件上 绑定 v-on=”$listeners”, 在a组件中,监听c组件触发的事件。就能把c组件发出的数据,传递给a组件。

随记 VUE_第33张图片             

父组件:

随记 VUE_第34张图片

A组件:

 随记 VUE_第35张图片

B组件:

随记 VUE_第36张图片

C组件:

随记 VUE_第37张图片

      03. 中央事件总线 :主要是在兄弟组件之间 (适合碰到组件跨级传递消息)

             缺点是,碰到多人合作时,代码的维护性较低,代码可读性低

随记 VUE_第38张图片

bus可以理解为这是一个传话人员

父组件下两个组件:

随记 VUE_第39张图片

兄弟组件1:

随记 VUE_第40张图片

兄弟组件2:

随记 VUE_第41张图片

      04. 父组件往子组件传递:provide 和 inject

随记 VUE_第42张图片

provide就相当于加强版父组件prop , inject就相当于加强版子组件的props 

因为以上两者可以在父组件与子组件、孙子组件、曾孙子...组件数据交互,也就是说不仅限于prop的父子组件数据交互,只要在上一层级的声明的provide,那么下一层级无论多深都能够通过inject来访问到provide的数据

缺点:
这么做也是有明显的缺点的,在任意层级都能访问导致数据追踪比较困难,不知道是哪一个层级声明了这个或者不知道哪一层级或若干个层级使用了,因此这个属性通常并不建议使用能用vuex的使用vuex,不能用的多传参几层,但是在做组件库开发时,不对vuex进行依赖,且不知道用户使用环境的情况下可以很好的使用
 

父组件:

随记 VUE_第43张图片

子组件:

随记 VUE_第44张图片

     05. $parent 和 $children 

使用 this.$parent 查找当前组件的父组件。
使用 this.$children 查找当前组件的直接子组件,可以遍历全部子组件, 需要注意 $children 并不保证顺序,也不是响应式的。
使用 this.$root 查找根组件,并可以配合$children遍历全部组件。
使用 this.$refs 查找命名子组件。

子组件读取父组件的数据:

随记 VUE_第45张图片         随记 VUE_第46张图片    随记 VUE_第47张图片  显示“app => c1的数据”

父组件读取子组件的数据:

随记 VUE_第48张图片

开发中常用的方式:

随记 VUE_第49张图片

    06. vuex

22. 获取DOM元素

使用 this.$refs.xxx 获取原生的jsDOM对象

注意: ref 属性值不能重名

随记 VUE_第50张图片

获取的时候必须在组件DOM加载完毕之后

如果是给组件绑定ref 属性,那么 this.$ref.xxx 获取的是当前的组件对象

23. 给DOM元素添加事件的特殊情况

在DOM更新的时候(本身隐藏,加载的时候显示),在生命周期mouted()中获取不到更新的DOM。因为需要vue 提供的方法来实现,获取更新的DOM

随记 VUE_第51张图片

this.$nextTick() 是在DOM更新循环结束之后执行回调函数,在修改数据之后使用此方法,在回调中获取到更新之后的DOM(实际开发中使用得比较多)

修改之后就能使得输入框自动获取焦点:

随记 VUE_第52张图片

24. VUE核心插件 -- Vue  Router

随记 VUE_第53张图片

随记 VUE_第54张图片

js实现的方式:

随记 VUE_第55张图片

vue 实现的方式:

用 Vue.js + Vue Router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 Vue Router 添加进来,我们需要做的是,将组件 (components) 映射到路由 (routes),然后告诉 Vue Router 在哪里渲染它们。下面是个基本例子:




Hello App!

Go to Foo Go to Bar

使用步骤:

 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)

// 1. 定义 (路由) 组件。
// 可以从其他文件 import 进来
const Foo = { template: '
foo
' } const Bar = { template: '
bar
' } // 2. 定义路由 // 每个路由应该映射一个组件。 其中"component" 可以是通过 Vue.extend() 创建的组件构造器, // 或者,只是一个组件配置对象。 const routes = [ { path: '/foo', component: Foo }, { path: '/bar', component: Bar } ] // 3. 创建 router 实例,然后传 `routes` 配置。你还可以传别的配置参数, 不过先这么简单着吧。 const router = new VueRouter({ routes // (缩写) 相当于 routes: routes }) // 4. 创建和挂载根实例。 // 记得要通过 router 配置参数注入路由,从而让整个应用都有路由功能 const app = new Vue({ router }).$mount('#app') // 现在,应用已经启动了!

通过注入路由器,我们可以在任何组件内通过 this.$router 访问路由器,也可以通过 this.$route 访问当前路由

// Home.vue
export default {
  computed: {
    username () {
      // 我们很快就会看到 `params` 是什么
      return this.$route.params.username
    }
  },
  methods: {
    goBack () {
      window.history.length > 1
        ? this.$router.go(-1)
        : this.$router.push('/')
    }
  }
}

要注意,当  对应的路由匹配成功,将自动设置 class 属性值 .router-link-active

 组件支持用户在具有路由功能的应用中 (点击) 导航。 通过 to 属性指定目标地址,默认渲染成带有正确链接的  标签,可以通过配置 tag 属性生成别的标签。另外,当目标路由成功激活时,链接元素自动设置一个表示激活的 CSS 类名。

 比起写死的  会好一些,理由如下:

  • 无论是 HTML5 history 模式还是 hash 模式,它的表现行为一致,所以,当你要切换路由模式,或者在 IE9 降级使用 hash 模式,无须作任何变动。

  • 在 HTML5 history 模式下,router-link 会守卫点击事件,让浏览器不再重新加载页面。

  • 当你在 HTML5 history 模式下使用 base 选项之后,所有的 to 属性都不需要写 (基路径) 了。

将激活 class 应用在外层元素

有时候我们要让激活 class 应用在外层元素,而不是  标签本身,那么可以用  渲染外层元素,包裹着内层的原生  标签:


  /foo

在这种情况下, 将作为真实的链接 (它会获得正确的 href 的),而 "激活时的 CSS 类名" 则设置到外层的 

  •  

    25. 命名路由:给路由起名字

    随记 VUE_第56张图片

    26. 路由参数

    地址栏上的路由范式:

    随记 VUE_第57张图片

    01. 动态路由参数:以冒号开头

     

    随记 VUE_第58张图片

    显示结果:

    随记 VUE_第59张图片

    查询:

    随记 VUE_第60张图片

    显示结果:

    随记 VUE_第61张图片

    获取动态路由参数:this.$route.params.xx

    随记 VUE_第62张图片

    27.嵌套路由

    随记 VUE_第63张图片   

    随记 VUE_第64张图片

    总结:

    随记 VUE_第65张图片

    随记 VUE_第66张图片

    28. 动态路由匹配

    随记 VUE_第67张图片

    随记 VUE_第68张图片

    因此,以下切换路由的时候,因为复用的同个组件,所以created()只会调用1次。

    随记 VUE_第69张图片     若想实现切换路由的时候,页面的数据发生变化。则必须使用watch监听当前组件内部的路由信息的变化,从而改变组件的内容。

    29. keep-alive在路由中的使用

    随记 VUE_第70张图片

    根据业务需求,缓存组件

    30. 路由元信息 meta(配置信息):主要用于路由权限控制

    随记 VUE_第71张图片

    需求:当跳到“我的博客”页面的时候,需要登录了才能进入。

    若该页面还没登录,则跳转到“登录”页面;若登录成功,则停留在当前页面。

    使用全局路由守卫实现该逻辑。

    随记 VUE_第72张图片

    跳转到登录页面,提交用户信息。当点击登录按钮的时候:保存用户信息到本地,然后使用编程式导航跳转到“我的博客”页面

    随记 VUE_第73张图片

    使用“路由守卫”进行拦截,任意路由切换的时候,都会调用都这个全局路由守卫(标星)

     

    随记 VUE_第74张图片

    31. 导航守卫

           01. beforeRouteEnter

    守卫执行之前,组件实例还没被创建,所以不能获取组件实例 this

    随记 VUE_第75张图片

            02. beforeRouteUpdate 路由更新之前

    组件切换时,页面响应的更新。有三种方式:全局路由守卫、路由更新、watch监听路由

    随记 VUE_第76张图片

          03. beforeRouteLeave() 路由离开之前

    在路由离开之前,需要做的操作。例如提醒用户在离开页面之前先保存数据。

    随记 VUE_第77张图片

    31. axios

    随记 VUE_第78张图片

    API简单、基于ES6和Promise的一些用法、可以拦截请求和响应……

    https://www.kancloud.cn/yunye/axios/234845

    并发请求:

    随记 VUE_第79张图片

    32.axios请求配置config

    发送数据请求之前处理数据:transformRequest

    随记 VUE_第80张图片

    响应数据回来之前处理数据:transformResponse

     随记 VUE_第81张图片

     

    随记 VUE_第82张图片

    33 axios拦截器

    请求拦截器:

    随记 VUE_第83张图片

    响应拦截器:

    随记 VUE_第84张图片

    开发实例:模拟类似cookie的机制

    随记 VUE_第85张图片

    模拟加载后台回来的数据,页面loading

    逻辑:在请求拦截器中使得loading显示,在响应拦截器中使得loading隐藏

    34. webpack

    最流行的 JavaScript 打包工具。可以打包所有的资源(表、样式、脚本、图片)等;模块化开发;

    随记 VUE_第86张图片

    gulp 打包工作,用得也不少

    随记 VUE_第87张图片

    模块的实现:

    随记 VUE_第88张图片

    main.js

    随记 VUE_第89张图片

    App.js

    随记 VUE_第90张图片

    webpack的配置:

    随记 VUE_第91张图片

    新版本编译:

    随记 VUE_第92张图片

    build.js解析:

    随记 VUE_第93张图片

    随记 VUE_第94张图片

    随记 VUE_第95张图片

    35.webpack的编译:

    01. 增加入口文件和出口文件,并配置文件监视改动。运行webpack命令。当文件改动时,文件自动产生build.js。

    随记 VUE_第96张图片

    02. 配置不同环境

    随记 VUE_第97张图片

    36. css-loader 和 style-loader 处理样式

    下载 :npm i style-loader css-loader -D

    配置:

    随记 VUE_第98张图片

    随记 VUE_第99张图片

    注意:新版本的webpack是rules不是loaders

    37. url-loader 和 file-loader 处理图片和文件

    下载 :npm i url-loader file-loader -D

    配置:

    随记 VUE_第100张图片

    随记 VUE_第101张图片

    图片的字节数小于limit时,图片将转成base64编码(减少1次图片的网络请求)。当图片超过limit数(太大时),(HTML的可读性差,且影响下载速度)可能会显示不出来。因此要设置一个合理的limit

    随记 VUE_第102张图片

    38. less-loader

    下载 :npm i less 和  npm i less-loader -D

    配置:

    随记 VUE_第103张图片

    39.  自动输入html文件(html模板生成)

    下载插件:npm i html-webpack-plugin -D

    配置:

    随记 VUE_第104张图片

    随记 VUE_第105张图片

    40. webpack-dev-server 配置webpack服务 实现热更新

    下载:npm i webpack-dev-server --save-dev

    配置:

    随记 VUE_第106张图片

    随记 VUE_第107张图片

    41. 解析ES6

    模块下载:

    随记 VUE_第108张图片

    随记 VUE_第109张图片

    npm install babel-core babel-loader babel-preset-env babel-plugin-transform-runtime -D

    配置:(记得配置对node_modules进行ES6的排除编译)

    随记 VUE_第110张图片

    42. 单文件的创建

    包的下载:npm install vue-loader vue-template-compiler -D

    (-D devDependencies开发依赖,辅助开发        -S dependencies保存在项目中,属于项目依赖,例如vue.js )

    随记 VUE_第111张图片

    随记 VUE_第112张图片

    出错处理:

    随记 VUE_第113张图片

    43. commonsChunkPlugin 主要用来提取第三方库和公共模块。避免加载时间过长

    随记 VUE_第114张图片

    随记 VUE_第115张图片

    1. 不分离出第三方库和自定义公共模块 

    随记 VUE_第116张图片

    多入口:

    随记 VUE_第117张图片

    多出口:

    随记 VUE_第118张图片

    2. 分离出第三方库

    随记 VUE_第119张图片

    随记 VUE_第120张图片

    随记 VUE_第121张图片随记 VUE_第122张图片

    随记 VUE_第123张图片

    随记 VUE_第124张图片

    从第三方库中分离出公共模块:minChunks是必须的配置

    随记 VUE_第125张图片

    随记 VUE_第126张图片

    44. webpack异步加载的原理 --  ensure

    随记 VUE_第127张图片

    随记 VUE_第128张图片

    动态加载 js 文件

    随记 VUE_第129张图片

    入口文件main.js: ensure中的中括号里面是加载依赖的模块

    随记 VUE_第130张图片

    配置:

    随记 VUE_第131张图片

    分离出公共的文件、输出模板入口:

    随记 VUE_第132张图片

    chunks 这个配置的作用:

    主要用于多入口文件,当你有多个入口文件的时候,它就会编译生成多个打包后的文件。chunks就能选择你要使用哪些js文件。注意顺序。先引入公共资源,再引入工具资源,最后引入模块资源

    随记 VUE_第133张图片

    inject :四个值

    true (默认,html的body的底部)

    body(html的body的底部)

    head(在html的head标签中)

    false(一般不用)

    随记 VUE_第134张图片

     

    45. vue-cli的简单介绍

    3.0 的好处:vue ui 图形化界面、个性化配置(傻瓜式配置)

     

    46.v-for 中的key的作用:作为节点唯一的标识。使其更高效的更新虚拟DOM

    key 的值或是数据库的id,或是列表的索引index

    随记 VUE_第135张图片

     

    随记 VUE_第136张图片

    随记 VUE_第137张图片

    随记 VUE_第138张图片

    随记 VUE_第139张图片

    随记 VUE_第140张图片

    随记 VUE_第141张图片

    总结:当给组件使用v-for渲染遍历的时候,一定要加上:key属性,避免让vue帮咱们计算DOM,影响渲染的效率

    47. restful 规范

    随记 VUE_第142张图片

    随记 VUE_第143张图片

    随记 VUE_第144张图片随记 VUE_第145张图片

    随记 VUE_第146张图片

    随记 VUE_第147张图片

    随记 VUE_第148张图片

    48. 初始化项目

    随记 VUE_第149张图片

     

     

     

     

     

     

  • 你可能感兴趣的:(Vue1.x和Vue2.x)