渐进式框架 
声明式渲染(无需关心如何实现)、组件化开发、客户端路由(vue-router)、大规模的数据状态(vuex)、构建工具(vue-cli) 
全家桶:vue.js+vue-router+vuex+vue-cli+axious

Vue核心知识点

数据驱动(主要操作的是数据) 
数据变化会导致视图自动更新 
组件化开发

框架的模式

MVC单项的数据绑定

  • 只能通过改变数据来改变视图

MVVM 双向的数据绑定

  • 视图发生改变,数据也会跟着变
  • 数据发生改变,视图也会跟着改变

vue的使用方式

1、采用cdn:<script src="https://unpkg.com/vue"></script> 
2、在需要的项目中安装vue模块 npm install vue,安装之后导入vue.js文件

跑环境

初始化package.json文件,在项目中执行npm init -y可自动生成一个默认的package.json文件; 
由于项目依赖的模块较大,每次上传下载同步都很浪费时间,所以我们只需要上传package.json文件,里面写了所有的依赖模块,我们同步下来之后只需要在需要的项目中打开cmd窗口执行npm install,就可以把项目依赖的模块下载到;

vue中数组的变异方法(能改变原数组)

如果data中属性的值是一个数组,如果想改变数组中内容,只能使用原生的会修改原数组的方法进行修改,普通的 数组[索引]=值 不行; 
操作数组的方法:(以下方法都会修改原数组)

  • unshift、push、shift、pop、splice、reverse、sort

vue中常用的(以下方法都为声明式方法,for循环为编程式方法,能清晰的看到每一步)

  • forEach、filter、map、some、every、reduce、find(ES6)

forEach,for,for in,for of的区别 
forEach:不支持返回值,只是普通的循环遍历 
for in:key输出的值为字符串类型,包括把数组当成对象添加的属性也可以遍历出来 
for of:只返回具有数字索引的属性。这一点跟for…in循环也不一样。(不能遍历对象)

    let arr = [3, 5, 7];
arr.foo = 'hello'; for (let i in arr) {
//for in是把arr当成对象遍历,i是属性名,包括arr的私有属性
console.log(i); // "0", "1", "2", "foo"
} for (let i of arr) {
//for of是把arr当成数组遍历,i是数组中的每一项
console.log(i); // "3", "5", "7"
}
for of循环不会返回数组arr的foo属性
如果只想拿到索引,可用keys()方法
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
//
//
如果两个都想拿到,可用entries()方法
for (let (index, elem) of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"

把Vue当成对象添加的私有方法

全局过滤器:Vue.filter(方法名,方法);相当于给全局过滤器中增加了一个方法(一次只能增加一个)

 Vue.filter('my',data=>{return data});
//页面中使用
<div id="app">
{{count|my}}
</div>

创建一个全局组件:Vue.component(自定义标签名,需要配置的参数)

//js代码
Vue.component('my-hand',{
template:'<h3>{{msg}}</h3>',
data(){
return {msg:'我很英俊'}
}
});
let vm=new Vue({
el:'#app'
})
//页面中使用
<div id="app">
<my-hand></my-hand>
</div>

初始化vue时传入对象中的属性

el

表示vue的属性和方法对哪个DOM根元素起作用(对它的后代元素也起作用)

data :

data中的内容表示需要双向绑定时用到的数据,写在data中的属性都会挂载到当前Vue的实例上;(可以直接用vm.msg来调用);

methods :

methods中的方法也将挂载到Vue的实例上。可以直接通过vm实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue的实例。 
指令表达式中使用方法的时候,如果方法名后面不写括号,则会默认传入事件对象MouseEvent。写括号代表要传递参数,而不是直接执行,要手动传入事件对象$event。 
注意

  • 1、methods中的方法名不能和data中的变量名一样,因为都会挂载到vue的实例上,重名会报错
  • 2、不应该使用箭头函数来定义method中的方法,因为使用箭头函数会改变函数中的this,而我们要保证方法中的this都是vue的实例
  • 3、{{}}中执行method中的方法,方法后面必须要加(),才代表执行

filters

允许你在filters中定义自己的过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号中和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号“|”来指示; 
注意
1、filters方法中的this都是window 
2、后面的方法执行的时候,会默认的把之前的值当作第一个参数传递给后面的方法 ; 
3、filters中的方法在{{}}中执行的时候,可以不写括号;

  <!-- 在双花括号中 -->
{{ message | toFixed(2)}}//toFixed方法执行时不改变原数据,只是改变message的显示效果
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | toFixed"></div>
filters: {
toFixed(val,pra){
return '¥'+val.toFixed(pra);
}
}

computed

计算属性(会有缓存),不是方法:某一个属性的值依赖于其他值的改变而改变时,可使用computed,把需要绑定的属性写在computed中,只会跟依赖的值产生关系。属性中默认会有set和get方法,如果把计算属性写成函数,则默认只调用get方法(get方法必须要有返回值);computed不支持异步;

watch:

监听属性(默认只监控所给属性的第一层):watch中的方法名应该与data中的要监听的属性名相同。只有当监听的值发生变化的时候才会触发对应的方法;watch支持异步,当需要异步的时候,watch还支持设置中间状态;如果想要深度监控,则需要写为对象的形式,并且修改deep:true来实现深度监控;

计算属性和方法的区别

1、缓存:计算属性会根据依赖的属性(归vue管理的数据,可以响应式的变化)进行缓存,只有在它的相关依赖发生改变时才会重新求值; 
2、在{{}}中使用的时候,方法名后必须要加()来执行,而计算属性如果不需要传递参数,则不需要写(); 
3、方法是不管数据有没有发生改变,都会重新计算,且get方法必须有返回值;

什么时候用computed什么时候用watch

当数据依赖于多个值的改变而改变时,我们就需要用computed;

 <div id="app">
<input type="text" v-model="val"> {{fullName}}
</div>
let vm=new Vue({
el:'#app',
data:{
val:'',
firstName:'zfpx',
lastName:'zy'
},
computed:{
fullName(){
//只要依赖的其中一个值改变,就会执行此方法;
return this.firstName+this.val+this.lastName;
}
}
});

当监听的值发生改变的时候,数据需要跟着变,就要用watch,需要异步操作的时候,就必须用watch;

let vm=new Vue({
el:'#app',
data:{
val:'',
firstName:'zfpx',
lastName:'zy',
fullName:''
},
watch:{
//val的值改变了才会触发下面的方法,而且会默认传入两个参数,新的值和老的值
val(newV,oldV){
this.fullName=this.firstName+this.val+this.lastName;
}
//如果写成一个函数的形式(如上的形式),则只会监控第一层级属性对应的值,第一层级的值发生改变才会触发函数执行;如果要实现深度监控,则要写成如下对象的形式,将deep深度监控属性赋值为true;
val:{
//监控时发生改变就会触发此方法,方法名必须是handler
handler(newV){
localStorage.setItem('todo',JSON.stringify(newV));
},
deep:true
}
}
});

{{}}:其中可放表达式、可以放赋值运算、计算、三元运算符(尽量少写逻辑运算)

vue的实例拥有的属性

此处的this是vue的实例 
this.$data vm上的响应式的数据,是个对象 
this.$watch 监控 
this.$el 挂载的DOM根元素 
this.$set 后加的属性实现响应式的变化 
this.$nextTick(()=>{}) 异步方法,渲染DOM完成后获取到需要的最新的数据 
this.$refs.xxx 获取ref值为xxx的vue对象(可通过this.$refs.xxx.$el获取DOM元素)(通过v-for循环出来的可以获取多个,否则只能获取一个)

 尽管有 prop 和事件,但是有时仍然需要在 JavaScript 中直接访问子组件。为此可以使用 ref 为子组件指定一个引用的值。如:
<div id="parent">
<user-profile ref="profile"></user-profile>
</div>

为什么data中的属性会出现响应式的变化?

vue会循环data中的属性,依次增加getter和setter方法,来实现响应式的变化。(只有data中的属性会被增加getter和setter方法,下面的例子中属性a中的school属性不会被增加) 
使用实例.$set可以给对象添加响应式的数据变化例如:vm.$set(vm.a,'school',1)

let vm=new Vue({
el:'#app-3',
data:{
msg:'zhufeng',
a:{school:''}
}
methods:{
}
});

VUE详解的更多相关文章

  1. win10 安装vue 详解-包括node.js、npm、webpack

    1.下载 去官网下载 node.js https://nodejs.org/en/download/ 一般不会选择最新的,我安装的是 12.18.4 进入历史记录页面网址 https://nodejs ...

  2. 05-Vue入门系列之Vue实例详解与生命周期

    Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...

  3. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  4. 详解Vue.js 技术

    本文主要从8个章节详解vue技术揭秘,小编觉得挺有用的,分享给大家. 为了把 Vue.js 的源码讲明白,课程设计成由浅入深,分为核心.编译.扩展.生态四个方面去讲,并拆成了八个章节,如下: 准备工作 ...

  5. Vue.js项目详解

    还是以Blog项目来讲解,最近我本人利用闲暇时间,以博客作为参考学习一些新的技术并尝试之前没有尝试过的思路来玩玩. 技术看似枯燥,但是带有一个目的来学,你会发现还是蛮有趣的. 主要实践的就是前后端分离 ...

  6. 详解vue的数据binding原理

    自从angular火了以后,各种mv*框架喷涌而出,angular虽然比较火,但是他的坑还是蛮多的,还有许多性能问题被人们吐槽.比如坑爹的脏检查机制,数据binding是受人喜爱的,脏检查就有点…性能 ...

  7. vue 文件目录结构详解

    vue 文件目录结构详解 本篇文章主要介绍了vue 文件目录结构详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 项目简介 基于 vue.js 的前端开发环境,用于前后 ...

  8. vue和react全面对比(详解)

    vue和react对比(详解) 放两张图镇压小妖怪 本文先讲共同之处, 再分析区别 大纲在此: 共同点: a.都使用虚拟dom b.提供了响应式和组件化的视图组件 c.注意力集中保持在核心库,而将其他 ...

  9. vue实例详解

    Vue实例的构造函数 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的 虽然没有完全遵循 MVVM 模式, Vue 的设计无疑受到了它的启发.因此在文档中经常会使用 ...

随机推荐

  1. Inno Setup自定义卸载文件名称的脚本

    Inno Setup 支持在同一个目录中安装多个应用程序,所以根据安装的先后次序自动将卸载程序文件命名为 unins000.exe,unins001.exe,unins002.exe 等等.这是 IN ...

  2. PTCSolution 关注

      2013.12.28更新: 经过几次整理和再次租赁下线,点击数明显增加,现在995下线点击数3413.再将2页半的点击数低的下线替换掉,AVG肯定超过4. 这么短的时间整理效果如此明显是我没有想到 ...

  3. JQUERY中的事件处理:RETURN FALSE、阻止默认行为、阻止冒泡以及兼容性问题

    return false 在jQuery中,我们常用return false来阻止浏览器的默认行为,那"return false"到底做了什么? 当你每次调用"retur ...

  4. [转]在Sql Server中将字符串分割成表格数据示例

    本文转自:http://www.lmwlove.com/ac/ID718 比如我们有一个字符串 ) select @appName ='UserID=admin,Account=ABC' 然后我们要以 ...

  5. 同步和异步 阻塞和非阻塞 IO多路复用和select总结

    同步和异步的概念 同步是指用户线程发起IO请求后,需要等待或者轮询内核IO操作完成后才能继续执行: 异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程或者调用用户线程注册的回 ...

  6. 可视化Tensorboard图中的符号意义

    可视化Tensorboard图中的符号意义

  7. Because, since, as, for

    because, as, for, since这几个词都是表示“原因”的连词,语气由强至弱依次为:because→since→as→for;其中because, since, as均为从属连词,引导原 ...

  8. java实现 tf-idf

    1.前言 TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术.TF意思是词频(Term Frequency), ...

  9. 【Javascript】如何实现点的wave效果 && sinewave效果

    参考资料: sinewave效果:http://www.oneapm.com/ci/docker.html?utm_source=BaiduPaid&utm_medium=cpc&ut ...

  10. [Android] Android工程以jar包形式向第三方应用提供服务

    参考: http://www.cnblogs.com/0616--ataozhijia/p/4094952.html 以API 19为例: 系统默认提供的 android.jar整体大小为: 21.8 ...