一、概述
二、模版语法
三、计算属性
四、class与style绑定
五、条件渲染
六、列表渲染
七、事件处理器
八、表单控件绑定
九、组件
一、概述
在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。
二、模版语法
2.1、插值
2.1.1、文本
a、{{ msg }}
<span v-once>This will never change: {{ msg }}</span>
2.1.2、纯html
<div v-html="rawHtml"></div>
2.1.3、属性
<div v-bind:id="dynamicId"></div>
2.1.4、javascript表达式
每个绑定都只能包含单个表达式,语句、流程控制都不生效。
2.2、指令
<p v-if="seen">Now you see me</p>
2.2.1、参数
<a v-bind:href="url"></a>
2.2.2、修饰符 以半角句号’.’指明
<form v-on:submit.prevent="onSubmit"></form>
2.3、过滤器
{{ message | filterA('arg1', arg2) }}
{{ message | filterA | filterB }} //过滤器可串联
<div v-bind:id="rawId | formatId"></div>
2.4、缩写
a、v-bind
<a v-bind:href="url"></a>
<a :href="url"></a>
b、v-on
<a v-on:click="doSomething"></a>
<a @click="doSomething"></a>
三、计算属性
computed:{}
计算属性是基于它的依赖缓存,只有在它的相关依赖发生改变时才会重新取值,可省去不必要的计算执行。
3.1、计算setter
computed: {
fullName: {
// getter
get: function () {},
// setter
set: function (newValue) {}
}
}
3.2、观察watchers
在数据变化响应时,执行异步操作或开销较大的操作,这是很有用的。
四、class与style绑定
4.1、绑定html class
a、对象语法
<div class=“static" v-bind:class="{ active: isActive, 'text-danger': hasError }"></div>
b、数组语法
<div v-bind:class="[activeClass, errorClass]">
c、组件上使用
Vue.component('my-component', {
template: '<p class="foo bar">Hi</p>'
})
<my-component class="baz boo"></my-component>
4.2、內联样式
a、对象语法
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
or <div v-bind:style="styleObject"></div>
b、数组语法
<divv-bind:style="[baseStyles, overridingStyles]">
c、自动添加前缀
五、条件渲染
5.1、v-if
<h1 v-if="ok">Yes</h1>
a、<template> 中 v-if 条件组
<template v-if="ok">
</template>
b、v-else-if
<div v-if="type === 'A'">A</div>
<div v-else-if="type === 'B'">B</div>
<div v-else>Not A/B</div>
c、使用key控制元素的可重用
添加key,会被重新渲染,特别用于input
5.2、v-show(简单的切换display属性,不支持<template>语法)
5.3、区别
v-if
是真实的条件渲染,并且是惰性的,因为它会确保条件块在切换当中适当地销毁与重建条件块内的事件监听器和子组件。
v-if
有更高的切换消耗而 v-show
有更高的初始渲染消耗。如果需要频繁切换使用 v-show
较好,如果在运行时条件不大可能改变则使用 v-if
较好。
六、列表渲染
6.1、v-for
<li v-for="(item, index) in items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
</li>
a、template v-for 可渲染多个
<template v-for="item in items">
<li>{{ item.msg }}</li>
<li class="divider"></li>
</template>
b、对象迭代 v-for
<div v-for="(value, key, index) in object">
{{ index }}. {{ key }} : {{ value }}
</div>
c、整数迭代
<span v-for="n in 10">{{ n }}</span>
d、组件与v-for
6.2、key
类似vue1.x中的track-by,默认就地复制,不适用于依赖子组件状态或临时dom状态的列表渲染。
<div v-for="item in items" :key="
item.id"></div>
6.3、数组更新检测
a、变异方法:push()、pop()、shift()、unshift()、splice()、sort()、reverse(),能触发视图更新。
b、重塑数组:filter(), concat(), slice(),返回新数组
tips:以下变动不会被检测:
vm.items[indexOfItem] = newValue
vm.items.length = newLength
替换方法:
Vue.set(example1.items, indexOfItem, newValue)
example1.items.splice(newLength)
6.4、显示过滤/排序结果
通过computed组成新数组
七、事件处理器
7.1、监听事件
a、v-on 监听dom事件
<button v-on:click="counter += 1">增加 1</button>
<button v-on:click="greet">Greet</button>
<button v-on:click="say('what', $event)">Say what</button>
7.2、事件修饰符
.stop 阻止事件冒泡
.prevent 阻止默认事件
.capture 使用事件捕获模式
.self 仅该元素本身触发时
.once 只被触发1次
7.3、按键修饰符
.enter
.tab
.delete (捕获 “删除” 和 “退格” 键)
.esc
.space
.up
.down
.left
.right
可以通过全局 config.keyCodes 对象自定义按键修饰符别名:
// 可以使用 v-on:keyup.f1
Vue.config.keyCodes.f1 = 112
.ctrl
.alt
.shift
.meta
八、表单控件绑定
v-model:双向绑定
8.1、基本用法
a、文本
<inputv-model="message"placeholder="edit me”>
b、多行文本
<textarea v-model="message" placeholder="add multiple lines"></textarea>
c、复选框
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<input type="checkbox" id="john" value="John" v-model="checkedNames">
d、单选按钮
<input type="radio" id="one" value="One" v-model="picked">
<input type="radio" id="two" value="Two" v-model=“picked">
e、选择列表
<select v-model="selected" multiple>
</select>
8.2、绑定value
v-model
绑定的 value 通常是静态字符串,可通过组合v-bind来实现动态数据。
a、复选框
<input type=“checkbox" v-model=“toggle" v-bind:true-value=“a" v-bind:false-value="b">
b、单选按钮
<input type=“radio" v-model=“pick" v-bind:value="a">
c、选择列表
<select v-model="selected">
<option v-bind:value="{ number: 123 }">123</option>
</select>
8.3、修饰符
a、.lazy(默认input事件同步,加了.lazy则是change事件同步)
<input v-model.lazy="msg">
b、.number 返回数字
c、.trim 去除首位空白
九、组件
9.1、使用组件
a、注册 Vue.component(tagName, options)
b、局部注册 new Vue({components: {'my-component': Child}})
c、DOM模版解析说明
为了避免元素嵌套问题,使用is特性解决~
另外,使用字符串模版将不受该限制
d、data:在组件中,data必须是函数
对象字面量每次都是新建,而对象是用指针传递。
e、构成组件
消息传递:props down(父到子), events up(子到父)。
9.2、prop
a、传递数据
组件实例的作用域是孤立的,不能再子组件的模版内直接引用父组件的数据。
子组件需要显示的声明“props”。
b、camelCase vs kebab-case
props: ['myMessage’]
<child my-message="hello!"></child>
c、动态prop
<child v-bind:my-message="parentMsg"></child>
d、字面量语法 vs 动态语法
<comp some-prop="1"></comp> //传递的字符串
<comp v-bind:some-prop="1"></comp> //传递的实际数字 使用v-bind传递实际的javascript表达式
e、单向数据流
不应该在子组件内部修改prop,只能用来初始化或者辅助计算;否则可能影响父组件的状态。
f、prop验证
可以验证原生构造器类型
9.3、自定义事件
a、使用v-on绑定自定义事件
$on(eventName) 监听事件 // 父组件可用v-on来监听
$emit(eventName) 触发事件 // 类似trigger
tips:修饰符.native使得父组件监听一个原生事件。
<my-component v-on:click.native="doTheThing"></my-component>
b、非父子组件通信
bus.$emit('id-selected',1)
bus.$on('id-selected', function (id) {}
9.4、使用slot分发内容
a、编译作用域
<child-component>{{ message }}</child-component> //message存在父组件作用域内,子组件无法使用
b、单个slot
除非存在slot插槽,否则父组件内容将丢弃;当宿主内容为空时,才显示slot内容。
c、具名slot
<h1 slot="header">这里可能是一个页面标题</h1>
d、作用域插槽
<slot text="hello from child"></slot>
<child>
<template scope="props">
<span>hello from parent</span>
<span>{{ props.text }}</span>
</template>
</child>
9.5、动态组件
<component v-bind:is="currentView"></component>
data: {
currentView: 'home'
},
components: {
home: { /* ... */ },
}
a、keep-alive
把切换出去的组件保留在内存中,可保留它的状态或避免重新渲染。
<keep-alive><component :is="currentView"></component></keep-alive>
9.6、杂项
a、编写可复用的组件
可复用的组件,接口一定要清晰,vue组件的api分三个部分:props,events,slot
Props 允许外部环境传递数据给组件
Events 允许组件触发外部环境的副作用
Slots 允许外部环境将额外的内容组合在组件中。
b、子组件索引 ref
<user-profile ref="profile"></user-profile>
var child = parent.$refs.profile 访问子组件
tips: $refs为应急方案,应当避免在模版或计算属性中使用 $refs
。
c、异步组件
使用resolve、reject回调
d、组件命名约定
使用 kebab-case ,camelCase ,或 TitleCase
e、递归组件
组件在它的模板内可以递归地调用自己,不过,只有当它有 name 选项时才可以
f、内联模版
如果子组件有 inline-template 特性,组件将把它的内容当作它的模板,而不是把它当作分发内容。
g、v-once低级静态组件
不过当组件中包含大量静态内容时,可以考虑使用 v-once
将渲染结果缓存起来
- vue2.0读书笔记2-进阶
一.深入响应式原理 二.过渡效果 三.过渡状态 四.Render函数 五.自定义指令 六.混合 七.插件 八.单文件组件 九.生产环境 十.路由 vue-router: http://router.v ...
- vue2.0读书笔记3 - router、vuex
1.vue的应用场景.优势.劣势 优势 通常情况下,运行时效率更高:一个事件循环仅一次视图更新,无频繁的DOM操作: 数据与视图分离,通过管理数据流,控制页面的展现,便于维护.且高效: 数据双向绑定, ...
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0自学笔记
前言: 一.优点: 轻量级.高效率.上手快.简单易学.文档全面而简洁 二.功能: 1.模板渲染 2.模块化 3.扩展功能:路由.Ajax 三.课程包含: 1.Vue实例 2.Vue组件 3.Vue指令 ...
- The art of multipropcessor programming 读书笔记-硬件基础1
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- The art of multipropcessor programming 读书笔记-硬件基础2
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- Vue2.0学习笔记一 :各种表达式
#,过滤器 #,在Vue2.x中,过滤器只能在mustache绑定中使用,为了在指令帮定中实现同样的行为,你应该使用计算属性: #,过滤器可以串联 {{ message | filterA | ...
- Clr Via C#读书笔记---线程基础
趣闻:我是一个线程:http://kb.cnblogs.com/page/542462/ 进程与线程 进程:应用程序的一个实例使用的资源的集合.每个进程都被赋予了一个虚拟地址空间. 线程:对CPU进行 ...
随机推荐
- scvmm sdk之powershell(一)
shell表示计算机操作系统中的壳层,与之相对的是内核,内核不能与用户直接交互,而是通过shell为用户提供操作界面,shell分为两类,一种提供命令行界面,一种提供图形界面.windows powe ...
- cron和crontab
crontab -l 列出目前的计划任务(时程表) crontab -e 编辑计划任务 计划任务的格式如下: f1 f2 f3 f4 f5 program 其中 f1 是表示分钟,f2 表示小时, ...
- ce+od无法同时附加进程的问题
CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无 ...
- xml写入
XmlDocument xmlDocument=new XmlDocument(); XmlElement root = xmlDocument.CreateElement("", ...
- maven多模块启动required a bean of type com.xxx.xxx.service that could not be found.
Description: Field testService in com.xxx.xxx.api.controller.TestController required a bean of type ...
- C# defualt关键字默认值用法
默认值表达式生成类型的默认值. 默认值表达式在泛型类和泛型方法中非常有用. 使用泛型类和泛型方法时出现的一个问题是,如何在无法提前知道以下内容的情况下将默认值赋值给参数化类型 T: T 是引用类型还是 ...
- bat windows10系统垃圾清理---
@echo off color 0a title windows10系统垃圾清理--- echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★ echo ★☆ ★☆ ★☆ ★☆ ★☆ ...
- django系列5.3--ORM数据库的多表操作
首先来创建一个模型,数据库的关系就清楚了 models.py from django.db import models # Create your models here. class Author( ...
- PHP设计超级好用的文件上传处理类一 (37)
<?php class FileUpload { private $filepath; //指定上传文件保存的路径 private $allowtype=array('gif', 'jpg', ...
- java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)
在JavaWeb中的监听器分类 在Javaweb中存在三个被监听对象: HttpServletRequest HttpSessoin ServletContext 监听者 被监听者 监听到事件对象 H ...