一个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. git windows 安装 - Github同步 / Vscode源代码管理:Git 安装操作

    github上创建立一个项目 登录github网站,在github首页,点击页面右下角"New Repository" 最后点击"Create Repository&qu ...

  2. 表达式树练习实践:C#值类型、引用类型、泛型、集合、调用函数

    目录 表达式树练习实践:C#值类型.引用类型.泛型.集合.调用函数 一,定义变量 二,访问变量/类型的属性字段和方法 1. 访问属性 2. 调用函数 三,实例化引用类型 四,实例化泛型类型于调用 五, ...

  3. C++类的this指针详解

    这篇文章主要讲解隐式this指针的概念,以及如何使用,包含const 先直接给出一个C++Primer里的类,你可能还不能完全看懂,但是不着急,我们一点点解释 class Sales_data { s ...

  4. C++基础之string类

    string也是属于顺序容器,但是string类很重要且经常使用,因此在这里单独记录. string的操作总结 string(const char *s,int n);  //用c字符串s初始化,s应 ...

  5. 品Spring:bean定义上梁山

    认真阅读,收获满满,向智慧又迈进一步... 技术不枯燥,先来点闲聊 先说点好事高兴一下.前段时间看新闻说,我国正式的空间站建设已在进行当中.下半年,长征五号B运载火箭将在海南文昌航天发射场择机将空间站 ...

  6. 关于瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)

    瀑布流 又称瀑布流式布局,是比较流行的一种网站页面布局方式.即多行等宽元素排列,后面的元素依次添加到其后,等宽不等高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置. 为什么使用瀑 ...

  7. Python连载40-协程定义及状态、send语句、yield用法

    一.协程 1.历史进程: (1)3.4引入协程,用yield来实现 (2)3.5引入协程语法 (3)实现协程比较好的包有asyncio,tornado,gevent 2.定义:协程是为非抢占式多任务产 ...

  8. 一步步构建.NET Core Web应用程序---仓储层,业务层的实现

    前言 上一篇文章介绍了整个项目的结构,接下来向大家介绍一下 我的 仓储及业务层具体的实现思路,如果有更好的实现方式,希望大家及时指出!!! 构建过程 一,数据访问 首先在 DataProvider 中 ...

  9. 环境搭建-CentOS集群搭建

    环境搭建-CentOS集群搭建 写在前面 最近有许多小伙伴问我,大数据的hadoop分布式集群该如何去搭建.所以,想着,就写一篇博客,帮助到更多刚入门大数据的人.本博客会一步一步带你实现一个Hadoo ...

  10. 死磕 java同步系列之mysql分布式锁

    问题 (1)什么是分布式锁? (2)为什么需要分布式锁? (3)mysql如何实现分布式锁? (4)mysql分布式锁的优点和缺点? 简介 随着并发量的不断增加,单机的服务迟早要向多节点或者微服务进化 ...