模版语法
模版语法已成为前端在数据驱动模式上 V 层最好的实现。
插值
<div id="app">
<!-- 文本 当对 data.message 发生改变时,对应插值的内容也会自动改变-->
<fieldset>
<legend>文本</legend>
<div>{{message}}</div>
</fieldset>
<!-- 纯 HTML {{}} 这种形式最终会被解释成文本,如果要想输入 HTML 结构,使用要用到 v-html="对象"-->
<fieldset>
<legend>纯 HTML</legend>
<div v-html="rawHtml"></div>
</fieldset>
<!-- 属性 元素的任意属性(包含自定义属性)都可以和对象绑定 :属性名(或者 v-bind:属性名)=“对象”-->
<fieldset>
<legend>属性</legend>
<img :src="src" alt="" />
<img v-bind:src="'../imgs/red.jpg'" alt="" />
</fieldset>
<!-- js 表达式 {{}} 可以用来解释 js 的表达式-->
<fieldset>
<legend>js 表达式</legend>
<div>{{1 + 1}}</div>
<div>{{status ? 'YES' : 'NO'}}</div>
<div>{{message.split('').reverse().join('')}}</div>
</fieldset>
</div>
var vm = new Vue({
el: '#app',
data: {
message: '我是文本',
rawHtml: '<h1>我是 h1 标签</h1>',
src: '../imgs/green.jpg',
status: true,
}
})
缩写
v-bind 缩写
<!--完整写法-->
<img v-bind:src="'../imgs/red.jpg'" alt="" />
<!--缩写-->
<img :src="src" alt="" />
v-on 缩写
<!--完整语法-->
<button v-on:click="greet">Greet</button>
<!--缩写语法-->
<button @click="greet">Greet</button>
指令
指令(Directive),换句话说就是元素的自定义属性,在 Vue 中是以 v- 为前缀的自定义属性,属性值为对象或 js 表达式
指令 | 类型 | 用法 |
---|---|---|
v-text | string | <!--v-text-->
` html
<span v-text="msg"></span>
<!--效果等同于-->
<!--v-text 的权重高于 {{}}-->
<span>{{msg}}</span>
`
|
v-html | string | <!--v-html-->
` html
<div v-html="html"></div>
`
|
v-show | boolean | <!--v-show-->
` html
<!--show 的值会直接影响 div 在文档中是否显示-->
<div v-show="show"></div>
`
|
v-if | boolean | <!--v-if-->
` html
<!--status 的值会直接影响 div 在文档中是否存在-->
<div v-if="status"></div>
`
|
v-else-if | boolean | <!--v-else-if-->
` html
<div v-if="flag == 1">1</div>
<!--必须跟 v-if 或者 v-else-if 元素后面-->
<div v-else-if="flag == 2">2</div>
`
|
v-else | 不需要表达式 | <!--v-else-->
` html
<div v-if="flag == 1">1</div>
<div v-else-if="flag == 2">2</div>
<!--必须跟 v-if 或者 v-else-if 元素后面-->
<div v-else>2</div>
`
|
v-for | Array | Object | Number | String | <!--v-for-->
` html
<!--
data = 3
结果会生成 3 个 div,
value 的值分类为 1, 2, 3
index 的值分别为 0, 1, 2
-->
<div v-for="(value, index) in data">
<span v-text="value"></span>
<span>{{index}}</span>
</div>
<!--也可以这样写-->
<div v-for="value in data">
<span v-text="value"></span>
</div>
<!--
data = "abc"
结果会生成 data.length 个 div,
value 的值分类为 a, b, c
index 的值分别为 0, 1, 2
-->
<div v-for="(value, index) in data">
<span v-text="value"></span>
<span>{{index}}</span>
</div>
<!--也可以这样写-->
<div v-for="value in data">
<span v-text="value"></span>
</div>
<!--
data = {name: 'dk', age: 18}
结果会生成 data 属性个数 个 div,
value 的值分类为 dk, 18
key 的值分别为 name, age
-->
<div v-for="(value, key) in data">
<span v-text="key"></span>
<span>{{value}}</span>
</div>
<!--也可以这样写-->
<div v-for="value in data">
<span v-text="value"></span>
</div>
<!--
data = [{name: 'dk1', age: 18}, {name: 'dk2', age: 20}]
结果会生成 data.length 个 div,
obj 的值分类为 data[0], data[1]
index 的值分别为0, 1
-->
<div v-for="(obj, index) in data">
<span v-text="JSON.stringify(obj)"></span>
<span>{{index}}</span>
</div>
<!--也可以这样写-->
<div v-for="obj in data">
<span v-text="JSON.stringify(obj)"></span>
</div>
`
|
v-on | Function | <!--v-on-->
` html
<!--click事件直接绑定一个方法-->
<button v-on:click="say1">say1</button>
<!--缩写方式-->
<!--click事件使用内联语句-->
<button @click="say2('调用了 say2', $event)">say2</button>
`
|
v-bind | Object | <!--v-bind-->
` html
<img v-bind:src="'imgs/red.jpg'" />
<!--缩写方式-->
<img :src="'imgs/yellow.jpg'" />
`
|
v-model | 表单元素的值 | <!--v-model-->
` html
<!--仅限于表单元素,双向绑定-->
<input type="text" v-model="mess"/>
`
|
v-pre | 不需要表达式 | <!--v-pre-->
` html
<!--{{}} 不编译,当字符串输出-->
<span v-pre>{{mess}}</span>
`
|
v-cloak | 不需要表达式 | <!--v-cloak-->
` html
<!--
mess = 'abc'
span 还没被 vue 解析的时候会显示 {{mess}}
解析后会显示 123
用于解决这两个转换的过程不友好的显示
尤其是在页面加载过慢的情况很容易出现这种情况
-->
<span v-cloak>{{mess}}</span>
`
|
v-once | 不需要表达式 | <!--v-once-->
` html
<!--内容只解释一次,当改变 mess 时不会再次映射到 span-->
<span v-once>{{mess}}</span>
`
|
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。