一个VUE项目的主树:

assets文件夹是放静态资源;

components是放组件;

router是定义路由相关的配置;

view视图;

app.vue是一个应用主组件;

main.js是入口文件

 知识点:

1.MVC和MVVM

MVC是Model-View- Controller的简写,分别表示:

Model(数据模型),用于存放数据

View(视图),也就是用户界面

Controller(y业务逻辑)是Model和View的协调者,Controller把Model中的数据拿过来给View使用

关系:用户操作> View (负责接受用户的输入操作)>Controller(业务逻辑处理)>Model(数据持久化)>View(将结果通过View反馈给用户)

缺点:1.所有业务逻辑都在Controller里操作,逻辑复杂且不利于维护,
     2.大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。
        3.当 Model 频繁发生变化,需要主动更新到View ;当用户的操作导致Model发生变化,同样需要将变化的数据同步到Model中, 这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。

MVVM是Model-View-ViewModel的简写,分别表示:

 Movel(数据模型)

     View(视图)
  ViewModel 是一个同步View 和 Model的对象

核心是双向数据绑定,View和Model之间并没有直接的联系,是通过ViewModel进行交互,View的变动,自动反映在ViewModel上,反之亦然,这样就保证视图和数据的一致性。

2.vue的优点是什么?

·   低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

· 可重用性。一些视图逻辑放在一个ViewModel里面,让很多view重用视图逻辑。

·  独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。

· 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

3.vue的生命周期

 第一对用于简单的ajax请求,页面初始化。

beforeCreate

 实例对象刚创建,元素DOM和数据都还没有初始化没有绑定属性

created

实例对象完成创建,属性已绑定,但DOM未生成,数据data已经初始化完成,方法也已经可以调用,但是DOM为渲染。

第二对马上渲染真实的DOM,获取vnode信息,ajax请求。

beforeMount

组件挂载之前触发,虚拟DOM创建已完成。DOM未完成挂载,数据也初始化完成,但是数据的双向绑定还是显示{{}},这是因为Vue采用了Virtual DOM(虚拟Dom)技术,先占住了一个坑。

mounted

  组件挂载完成触发,真实DOM完成,数据和DOM都完成挂载,在上一个周期占位的数据把值给渲染进去。一般请求会放在这个地方,因为这边请求改变数据之后刚好能渲染。

  第三对

beforeUpdate

数据更新前触发,diff算法对比之后重新渲染。只要是页面数据改变了都会触发,数据更新之前,页面数据还是原来的数据,当你请求赋值一个数据的时候会执行这个周期,如果没有数据改变不执行。

updated

    组件更新完成,不能更改数据,负责死循环。只要是页面数据改变了都会触发,数据更新完毕,页面的数据是更新完成的。beforeUpdate和updated要谨慎使用,因为页面更新数据的时候都会触发,在这里操作数据很影响性能和容易死循环。

 第四对

beforeDestroy

实例对象销毁之前触发,清除计时器和事件。这个周期是在组件销毁之前执行,在我项目开发中,觉得这个其实有点类似路由钩子beforeRouterLeave,都是在路由离开的时候执行,只不过beforeDestroy无法阻止路由跳转,但是可以做一些路由离开的时候操作,因为这个周期里面还可以使用data和method。比如一个倒计时组件,如果在路由跳转的时候没有清除,这个定时器还是在的,这时候就可以在这个里面清除计时器。

Destroyed

实例对象销毁后触发,剩余DOM空壳。

4.vue双向绑定原理

   Vue数据双向绑定(即数据响应式),是利用了Object.defineProperty()数据劫持重新定义了,对象获取属性值get和设置属性值set的操作来实现的。

        监听器Observer,劫持并监听所有属性,有变动的,就通知订阅者。
        订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。
        解析器Compile,解析每个节点的相关指令,并根据初始化模板data数据以及初始化相应的订阅器。替换数据v-model,  v-on

5.组件的传值

 a.父组件与子组件传值

父组件通过标签上面定义传值  :eg='data'  父组件中 data(){return {data:'egdata'}}.
   子组件通过props方法接受数据 props:['eg'] ,  在props 中添加了元素之后,就不需要在 data 中再添加变量了.

b.子组件向父组件传递数据
  子组件通过$emit方法传递参数触发事件,在父组件监听事件$on( )

子组件部分:

父组件中:

c.同级传值

1.query或params传参,this.$router.push( )

2.sessionstore传参

6.路由之间跳转

声明式(标签跳转) 编程式( js跳转)

①.直接修改地址栏中的路由地址    ②通过router-link实现跳转   ③通过js的编程的方式

vue路由两种方式:name和<router-link>中的to传参

<router-link:to = "{name: xxx, params: { key :value }}"> valuestring </router-link>

vue-router利用url传参

7.vue计算属性

   watch:监听属性,监听数的变化,监听对象。

computed:计算属性,对属性业务逻辑的操作,不循环。它对数据处理后,缓存内存里面。方法对任务操作。

8.vuex是什么?怎么使用?哪种功能场景使用它?

vue框架中状态管理,处理组件间的通讯。

使用:在main.js引入store,注入。新建一个目录store,….. export 。

场景有:单页应用中,组件之间的状态。音乐播放、登录状态、加入购物车

main.js:

import store from './store'

new Vue({

el:'#app',

store

})

属性有五种,分别是 State、 Getter、Mutation 、Action、 Module

·  vuex的State特性
           A、Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于一般Vue对象里面的data
           B、state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新
           C、它通过mapState把全局的 state 和 getters 映射到当前组件的 computed 计算属性中

· vuex的Getter特性
           A、getters 可以对State进行计算操作,它就是Store的计算属性
           B、 虽然在组件内也可以做计算属性,但是getters 可以在多组件之间复用
           C、 如果一个状态只在一个组件内使用,是可以不用getters

·  vuex的Mutation特性
           Action 类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态;Action 可以包含任意异步操作。

(3)不用Vuex会带来什么问题?

·         可维护性会下降,想修改数据要维护三个地方;

·         可读性会下降,因为一个组件里的数据,根本就看不出来是从哪来的;

·         增加耦合,大量的上传派发,会让耦合性大大增加,本来Vue用Component就是为了减少耦合,现在这么用,和组件化的初衷相背。

9.Vue中引入组件的步骤?

1)采用ES6的import ... from ...语法或CommonJS的require()方法引入组件
     2)对组件进行注册,代码如下

1.  // 注册

2.  Vue.component('my-component', {

template: '<div>A custom component!</div>'

})

使用组件<my-component></my-component>

10.vue.cli中怎样使用自定义的组件?

第一步:在components目录新建你的组件文件(smithButton.vue),script一定要export default {

第二步:在需要用的页面(组件)中导入:import smithButton from ‘../components/smithButton.vue’

第三步:注入到vue的子组件的components属性上面,components:{smithButton}

第四步:在template视图view中使用,<smith-button>  </smith-button>
    问题有:smithButton命名,使用的时候则smith-button。

11.vue的虚拟DOM 

Virtual DOM算法,简单总结下包括几个步骤:

  1. 用JS对象描述出DOM树的结构,然后在初始化构建中,用这个描述树去构建真正的DOM,并实际展现到页面中
  2. 当有数据状态变更时,重新构建一个新的JS的DOM树,通过新旧对比DOM数的变化diff,并记录两棵树差异
  3. 把步骤2中对应的差异通过步骤1重新构建真正的DOM,并重新渲染到页面中,这样整个虚拟DOM的操作就完成了,视图也就更新了

12.自定义指令(v-check、v-focus)的方法有哪些?它有哪些钩子函数?还有哪些钩子函数参数?

全局定义指令:在vue对象的directive方法里面有两个参数,一个是指令名称,另外一个是函数。

组件内定义指令:directives

钩子函数:bind(绑定事件触发)、inserted(节点插入的时候触发)、update(组件内相关更新)

钩子函数参数:el、binding

13.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 

在router目录下的index.js文件中,对path属性加上/:id。  使用router对象的params.id

14.active-class是哪个组件的属性?嵌套路由怎么定义?

vue-router模块的router-link组件。
   嵌套路由顾名思义就是路由的多层嵌套。 一级路由里面使用children数组配置子路由,就是嵌套路由。

15.为什么避免 v-if 和 v-for 用在一起?

当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中。通过v-if 移动到容器元素,不会再重复遍历列表中的每个值。

16.为什么使用key?

当有相同标签名的元素切换时,需要通过 key 特性设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。

17.4种vue当中的指令和它的用法

v-if:判断是否隐藏;v-for:数据循环;v-bind:class:绑定一个属性;v-model:实现双向绑定

18.怎么定义vue-router的动态路由以及如何获取传过来的动态参数?

在router目录下的index.js文件中,对path属性加上/:id。使用router对象的params.id。

19.<keep-alive></keep-alive>的作用是什么?

<keep-alive></keep-alive> 包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染。

20.v-show和v-if指令的共同点和不同点

v-show指令是通过修改元素的display的CSS属性让其显示或者隐藏

v-if指令是直接销毁和重建DOM达到让元素显示和隐藏的效果

21.vue中v-if与v-show的区别以及使用场景

v-if 是通过控制dom节点的存在与否来控制元素的显隐;

v-show是通过设置DOM元素的display样式,block为显示,none为隐藏;

v-if 有更高的切换消耗;

v-show有更高的初始渲染消耗;

v-if切换局部编译/卸载的过程中合适地销毁和重建内部的事件监听和子组件;

v-show只是简单的基于css切换;

场景:如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好

·         v-show指令是通过修改元素的display的CSS属性让其显示或者隐藏

·         v-if指令是直接销毁和重建DOM达到让元素显示和隐藏的效果

22.vue常用的修饰符

事件修饰符

.stop:用来阻止单击事件的冒泡

.self:表示当前事件发生在元素本身而不是子元素的时候进行触发

.prevent:表示提交事件不再进行重新加载

.capture:表示事件倾听,在事件发生的时候进行调用

表单修饰符(重点):

.lazy - 取代 input 监听 change 事件

.number - 输入字符串转为有效的数字

.trim - 输入首尾空格过滤

按键修饰符:

.enter

.tab

.delete

鼠标按键修饰符

.left

.right

.middle

23.axios是什么?怎么使用?它实现的登录流程?

登陆流程为:1、提交登陆表单,拿到后台返回的数据 2、将数据存入vuex

登录状态token,和用户名user存在sessionStorage里,以便组件使用,如果token为true表示用户已经登陆

axios是基于promise(诺言)用于浏览器和node.js是http客户端。

axios的作用是什么呢:axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。

特点:支持浏览器和node.js

支持promise

能拦截请求和响应

能转换请求和响应数据

能取消请求

自动转换JSON数据

浏览器支持防止CSRF(跨站请求伪造)

实践开发:vue框架重点知识分析的更多相关文章

  1. vue框架的知识

    基础:实例----组件----指令----选项-----计算属性----事件绑定----模板渲染-----内置动画 ---组件交互----路由. vuejs干了什么事情:数据渲染/数据同步 组件化/模 ...

  2. vue 2.0 路由切换以及组件缓存源代码重点难点分析

    摘要 关于vue 2.0源代码分析,已经有不少文档分析功能代码段比如watcher,history,vnode等,但没有一个是分析重点难点的,没有一个是分析大命题的,比如执行router.push之后 ...

  3. Vue.js高效前端开发 • 【Ant Design of Vue框架基础】

    全部章节 >>>> 文章目录 一.Ant Design of Vue框架 1.Ant Design介绍 2.Ant Design of Vue安装 3.Ant Design o ...

  4. ASP.NET MVC5 网站开发实践(一) - 项目框架

    前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过"摸着石头过河"吧.这段时间看了一些博主的文章收获很大,特别是 ...

  5. ASP.NET MVC5 网站开发实践(一) - 项目框架(转)

    前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过“摸着石头过河”吧.这段时间看了一些博主的文章收获很大,特别是@kencery,依 ...

  6. Vue框架Element的事件传递broadcast和dispatch方法分析

    前言 最近在学习饿了么的Vue前端框架Element,发现其源码中大量使用了$broadcast和$dispatch方法,而Element使用的是Vue2.0版本,众所周知在Vue 1.0升级到2.0 ...

  7. Vue 框架-12-Vue 项目的详细开发流程

    Vue 框架-12-Vue 项目的详细开发流程 首先,如果你还不了解 Vue 脚手架怎么搭建? 默认的环境中有哪些文件? 文件大概是什么作用? 那么,您要先查看之前的文章才有助于你理解本篇文章: Vu ...

  8. 每天一点点之vue框架开发 - 引入Jquery

    1. 安装jquery npm install jquery --save-dev 2.在build/webpack.base.conf.js中添加如下内容 var webpack = require ...

  9. 每天一点点之vue框架开发 - 使用vue-router路由

    1.安装路由(安装过的跳过此步) // 进入项目根目录 cd frontend // 安装 npm install vue-router --save-dev 2.在入口文件main.js中引入路由 ...

随机推荐

  1. 浅谈DanmakuView

      今天简单介绍一下开源的弹幕引擎---danmakuView   使用之前在build.gradle里面添加下面这一条(目前我使用的工具是AndroidStudio 3.1.2)   impleme ...

  2. Spring Boot核心(基本配置)

    上一篇Spring Boot我们简单讲了如何快速创建一个SpringBoot项目. 大家都知道SpringBoot非常强大,可以轻松与各种工具集成,但是我们知其然,也必须知其所以然. 今天开始就和大家 ...

  3. 05.Django基础五之django模型层(一)单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  4. Java中一维,二维数组的静态和动态初始化

    今天我们要开始来讲讲Java中的数组,包括一维数组和二维数组的静态初始化和动态初始化 数组概述: 数组可以看成是多个相同类型数据的组合,对这些数据的统一管理; 数组变量属于引用数据类型,数组也可以看成 ...

  5. 为博客添加 Gitalk 评论插件

    背景 Disqus需要翻墙才能正常使用 畅言有广告 2种评论系统都很难统一管理 优化 使用Gitalk评论插件 , gitalk 使用 Github 帐号登录,界面干净整洁,支持 MarkDown语法 ...

  6. opencv霍夫变换

    霍夫变换不仅可以找出图片中的直线,也可以找出圆,椭圆,三角形等等,只要你能定义出直线方程,圆形的方程等等. 不得不说,现在网上的各种博客质量真的不行,网上一堆文章,乱TM瞎写,误人子弟.本身自己就没有 ...

  7. [Mathematics][MIT 18.03] Proof of a Theory about the Solution to Second-order Linear Homogeneous Differential Equation

    At first, I'd like to say thank you to MIT open courses which give me the privilege to enjoy the mos ...

  8. Shell之脚本检查与调试

    目录 Shell之脚本检查与调试 参考 脚本语法检查 脚本运行调试 Shell之脚本检查与调试

  9. Shell之Function与Source

    目录 Shell之Function与Source 参考 Fuction的编写 Source的使用 Shell之Function与Source

  10. wordpress新注册用户或重置密码链接失效

    在网上找了好多个博客,一个比一个不要脸,要更改的是两个文件,最后都抄成一个文件了. 原文链接https://www.cnblogs.com/liudecai/p/6474611.html 我是按照这个 ...