vue总结

构建用户界面的渐进式框架

渐进式:用到什么功能即可使用转么的框架子模块。

两个核心点

向应的数据绑定

当时图发生改变->自动跟新视图,利用Object.defindProperty中的setter/getter代理数据,监控对数据的操作。(IE8不兼容)

组合的视图组件

ui页面映射位组件树

划分组件可维护,可重用,可测试

虚拟DOM

利用在内存中生成与真实DOM与之对应的数据结构,这个在内存中生成的结构。

当数据发生变化时,能够只能低级选出重新渲染组建的最小代价并应用到DOM操作上。

MVVM模式

M: Model 数据模型

V: view 视图模板

vm: view-Model 视图模板

V:

<div id="demo">
<input type="text" v-model="message">
<p>{{message}}</p>
</div>

vm:

let data = {
message: "hello world!"
}

M:

var vm = new Vue({
el: "#demo",
data: data
})

Vue实例

每一个应用都是通过Vue这个构造函数创建根实例(root instance)启动newVue

需要传入选项对象,对象包含挂载元素,数据,模板,方法等。

el:挂载元素选择器

data:代理数据

methods:定义方法

vue代理data数据

每个Vue实例都会代理data对象里的所有的属性,这些被代理的属性是响应的。新添加的属性不具备响应功能,改变后不会跟新视图。

实例自身属性和方法

暴露自身的属性和方法,以$开头为例:$el,$data

var vm = new Vue({
el: "#demo",
data: obj,
methods: {
clickHandle() {
alert(0);
}
}
});
//vm是一个对象,其中里面的为内置成员和属性,以$开头

声明式渲染

声明式:

只需声明在哪里做什么,而无需关心如何让实现,调用一些方法,类库实现。

命令式

需要以剧吐代码表达在哪里做什么,如何让实现。需求让自己实现的过程细节。

vue申明式渲染

初始化根实例,vue自动将数据绑定在DOM模板上

<div id="demo">
<input type="text" v-model="message">
<p>{{message}}</p>
</div> let data = {
message: "hello world!"
} var vm = new Vue({
el: "#demo",
data: data,
methods: {
//...
}
})

指令

是一种特殊的自定义行间属性,他的职责是当其表达式的值改变时相应地将某些行为应用到DOM上,Vue中,指令以v-开头。

v-bind 动态的绑定数据,可简写为":"
v-on 绑定事件监听,简写为"@"
v-text 更新数据,会覆盖已有结构
v-html 可以解析数据中的html
v-show 根据值的真假,切换元素的display属性
v-if 根据值得真假会被销毁,重建
v-else-if 多条件判断,为真渲染
v-else 条件都不符合渲染
v-for 基于源数据多次渲染元素或模板
v-model 在表单控件元素上创建双向数据的绑定
v-pre 跳过元素和子元素的编译过程
v-once 只渲染一次,随后数据更新不重新渲染
v-cloak 隐藏未编译的Mustache语法,css中设置[v-cloak]{display:none }

html模板

模板:基于DOM的模板,模板都是可解析的有效的HTML

插值:

文本:使用Mustache语法(双打括弧){{value}}

作用:替换实例上的属性值,当值改变时,插值内容处会自动更新

原生的html:双打括弧输出的是文本,不会解析html

<div id="demo">
<div v-html="html"></div>
</div> let obj = {
html:"<div>hello vue</div>"
}
var vm = new Vue({
el:"#demo",
data: obj
});

属性:使用v-bind进行绑定,可以响应变化

<div id="demo">
<div v-html="html" :costom="abc"></div>
</div> let obj = {
html:"<div>hello vue</div>",
abc: 1
}
var vm = new Vue({
el:"#demo",
data: obj
});

使用JavaScript表达式:写简单的表达式

<div>{{true?"yes":"no"}}</div>

字符串模板

template选项对象属性

模板将会替换挂载元素的内容都将被忽略

<div id="demo">
<div v-html="html" :costom="abc"></div>
</div> let obj = {
html:"<div>hello vue</div>",
abc: 1
}
var str = "<div>assassin{{abc}}</div>"//根节点只有一个,不能同级出现,嵌套是可以的
var vm = new Vue({
el:"#demo",
data: obj,
template: str
});
//上述视图将会被新模板替换掉

根节点只有一个,支持es6的超级模板

将HTML结构卸载一对script 标签中,设置type=“x-templete”。

//html
<script id="temp" type="x-templete">
<div>
{{abc}}
<span>assassin</span>
</div>
</script> //js
let obj = {
html:"<div>hello vue</div>",
abc: 1
}
var vm = new Vue({
el:"#demo",
data: obj,
template: "#temp"//对应的挂载点
});
//有局限性,跨文件等有问题

模板-rander函数

自己创建模板

绑定自己的样式:

.rad{color: red;}

<div id="demo">
<span v-bind:class="{red:addClass}"></span>
</div> let obj = {
addClass: false
};
var vm = new Vue({
el: "#demo",
data: obj
});
//会根据obj数据修改span中的class

render 选项对象属性

createElement(标签名,[数据对象],子元素);

.fl{float:left;}
.bgR{background: red;} <div id="demo"></div> let obj = {
html: "<div>hello vue.js</div>",
abc: 2
};
var vm = new Vue({
el: "demo",
data: obj,
render(createElement) {
return createElement(
"ul",{
class: {
bgr: true,
fl: true
},
style: {
font-size: "50"
},
attrs: {
abc: "assassin"
},
domProps: {//自身的一些属性
innnerHTML: "<li>html</li>"//会覆盖后面的标签
}
},[
createElement("li",1);
createElement("li",2);
createElement("li",3);
createElement("li",4);
]
)
}
});

列表渲染

v-for根据一组数组的选项列表进行渲染

语法:

value,key in items
value,key of items

变异方法:

vue提供一组方法,对数组进行操作的时候,会触发试图跟新,并不是原生的js方法。

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

事件处理器

v-on指令,用来监听DOM事件出发代码

语法:

v-on:eventName="eventHandle" 或者 @
事件处理函数写在methods中统一管理
时间对象:
在处理时间函数中获取
内联事件按处理函数执行,传入时间对象 $event 事件修饰符:
事件处理函数只有纯粹的逻辑判断,不处理DOM世间安得细节,如:阻止冒泡,取消默认行为,判断按键 修饰符的位置:
v-on:eventName.修饰符
修饰符:
.stop .prevent .capture .self .once 案件修饰符:
.enter .tab .delete .esc .space .up .down .left .right .ctrl .alt .shit .meta .键值

条件渲染

v-show指令

根据表达式的值,用来显示/隐藏元素

语法:v-show="表达式"

元素会被渲染在页面中,指针局的表达式的值进行css切换

动态class

动态绑定class

class也为元素的属性,可以使用v-bind:class

语法:

:class="{className:表达式}"
//表达式为true表示添加此className
//..
:class="[className1,className2]"

自定义指令

除了vue内置的指令,可以自己设置指令

选项对象的directives属性

{

directives:{}

}

钩子函数:

update被绑定元素所在的模板更新时调用

钩子函数中的参数:

el:指令所绑定的元素,可以用来直接操作DOM

binging:一个对象

binding对象下的value:指令的绑定值

directives: {
"focus": {//自定义指令
update(el,binding) {
if(binding.value) {
el.foucs();
}
}
}
} <input v-foucs="edtorTodos === item" />

计算属性

模板是为了描述视图属性的结构,模板中放入太多逻辑,导致模板过重且难以维护。

在计算一个计算属性时,Vue.js更新它的依赖列表并缓存结果,中有当其中一个依赖发生了变化,缓存的结果才无效。

语法:

在选项对象中

{

...

computed: {}

}

深度监控watch

浅监控:

watch: {
list: function() {
//监控list这个属性,当这个属性发生变化就会执行函数,list对象下的属性不能监控。
}
}

深监控:

watch: {
list: {
handler: function() {
store.save("xxxx",this.list);
},
deep: true
}
}

Vue总结(一)的更多相关文章

  1. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  2. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  3. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  4. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  5. Vue + Webpack + Vue-loader 系列教程(2)相关配置篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ 使用预处理器 在 Webpack 中,所有的预处理器需要和一个相应的加载器一同使用.vue- ...

  6. Vue + Webpack + Vue-loader 系列教程(1)功能介绍篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue ...

  7. 关于Vue.js 2.0 的 Vuex 2.0,你需要更新的知识库

    应用结构 实际上,Vuex 在怎么组织你的代码结构上面没有任何限制,相反,它强制规定了一系列高级的原则: 应用级的状态集中放在 store 中. 改变状态的唯一方式是提交mutations,这是个同步 ...

  8. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  9. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?

    引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...

  10. 初探Vue

    Vue.js(读音/vju:/,类似于view),是近来比较火的前端框架,但一直没有怎么具体了解.实现过,就知道个啥的MVVM啦,数据驱动啦,等这些关于Vue的虚概念. 由于最近,小生在公司中,负责开 ...

随机推荐

  1. JAVA SSL

    http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#InstallationAndCustom ...

  2. POJ 3254 Corn Fields 状态压缩DP (C++/Java)

    id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...

  3. 主程的晋升攻略(3):IP、DNS和CDN

    有段时间我面试程序猿时,喜欢问这个问题:局域网IP有哪些IP段?由这个问题再追问NAT(网络地址转换). 为什么不是每一个设备一个公网IP? 先说个关于QQ的小故事,最早开发QQ时.小马哥他们也没想到 ...

  4. poj_3371

    一道模拟题,写的有点麻烦 #include<iostream> #include<cstring> #include<cstdio> #include<alg ...

  5. BZOJ4259: 残缺的字符串 & BZOJ4503: 两个串

    [传送门:BZOJ4259&BZOJ4503] 简要题意: 给出两个字符串,第一个串长度为m,第二个串长度为n,字符串中如果有*字符,则代表当前位置可以匹配任何字符 求出第一个字符串在第二个字 ...

  6. nyoj--42--一笔画问题(并查集)

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. ...

  7. POJ 2828 线段树 逆序插入

    思路: 1.线段树 逆着插入就OK了 2.块状链表 (可是我并不会写) //By SiriusRen #include <cstdio> #include <cstring> ...

  8. ASP.NET Identity 角色管理(Roles)

    当我们使用ASP.NET 4.5创建模板项目时,会发现模板只提供了ApplicationUserManager用于用户的登录注册.修改.设置等,而没有提供与用户角色相关的代码,对此就需要我们自己手动的 ...

  9. PostgreSQL Replication之第六章 监控您的设置(3)

    6.3 检查操作系统进程 一旦我们检查了归档以及我们的系统视图,我们就准备检查系统 进程.检查系统进程可能看起来有点粗糙,但它被证明非常有效. 在master上,我们可以简单地检查一个名为wal_se ...

  10. Mac上vmware虚拟机Windows10安装JDK8及配置环境

    1.jdk8下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.双击下载的jdk进行安装 3.安装成功之 ...