Vue模板、指令、修饰符

133 阅读2分钟

Vue 模板语法

模板template的三种写法

一、Vue完整版,写在HTML里

<div id='xxx'>
    {{ n }}
    <button @click="add">+1</button>
</div>
<script>
new Vue({
    el:"#xxx",
    data:{n:0},//data可以改写为函数
    mothods:{add(){}}
})
</script>

二、Vue完整版,写在选项里

<div id="app">
 </div>
<script>
new Vue({
    template:`
            <div>
                {{ n }}
                <button @click="add">+1</button>
            </div>
`,
   data:{n:0},//data可以改写为函数
    mothods:{add(){this.a +=1}}
}).$mount('#app')//注意一个细节:div#app会被替代
</script>

三、Vue非完整版,配合xxx.vue文件

//xxx.vue文件
<template>
  <div>
      {{ n }}
      <button @click="add">+1</button>
    </div>
</template>
<script>
export default {
    //data必须是函数
    data(){
        return {
            n:0
        }
    },
    methods:{add(){this.a +=1}}
}
</script>
<style>这里写css</style>

然后在另一个写如下代码

import Vue from "vue"
import Xxx from "./xxx.vue"
//Xx是一个options对象
new Vue({
    render:h=> h(Xxx)
}).$mount('#app')

模板里的语法(HTML模板叫做template)

展示内容

  • 表达式
{{ object.a }} 表达式
{{ n+1 }} 可以写任何计算
{{ fn() }} 可以调用函数
如果值为 undefined 或 null 就不显示
另一种写法 <div v-taxt="表达式"></div>
  • HTML
假设 data.x 值为 <h1>hai</h1>
<div v-html="x"></div> 即显示标题hai
  • 如果不想这样像是
<div v-pre>{{ x }}</div>
v-pre:不对模板进行编译

###绑定属性

  • 绑定src属性
<img v-bind:src="x"/>
  • v-bind可简写为:
<img :src="x"/>
  • 绑定对象
<div :style="{border:1px solid red,widht: 400}">
	注意着里可以把"100px" 写成 100
</div>
  • 绑定事件
<button v-on:click="add">+1</button>
//点击之后,Vue会运行add()
<button v-on:click="XXX(1)">XXX</button>
//点击之后,Vue会运行XXX(1)
<button v-on:click="N+1"XXX</button>
//点击之后,Vue会运行N+1

即发现函数就括号调用,否则直接运行代码

缩写

<button @click="add">+1</button>

条件判断

  • if else
<div v-if="x>0">
    x大于0
</div>
<div v-else-if="x===0">
    x等于0
</div>
<div v-else>
    x小于0
</div>

循环

  • for (value,key) in 数组或对象
<ul>
    <li v-fro="(u,index) in array" :key="index">
    	索引 {{ index }} 值 {{ u }}
    </li>	
</ul>
<ul>
    <li v-fro="(value,name) in object" :key="name">
    	属性名 {{ name}}  属性值值 {{ value }}
    </li>	
</ul>
注意: 坑预警 :key="index" 有bug

显示、隐藏

  • v-hsow
<div v-show="n%2===0">n为偶数</div>
近似于
<div :style="{display: n%2===0?'blick':'none'}">
	n为偶数
</div>
注意:看见的元素display不只有blick

Vue模板主要的特点

  • 使用XML语法(不是使用HTML)
  • 使用{{ }}插入表达式
  • 使用v-html、v-on、v-bind等指令操作DOM
  • 使用v-if、v-for等指令实现条件判断和循环

指令(Directive)

  • 什么是指令
<div v-taxt="表达式"></div>
以v-开头的都是指令
  • 语法
v-指令名 = 值 例如 v-on:click="add"
如果值里没有特殊符号,可以不加引号
有些指令没有参数和值例如 v-pre
有些指令没有值 例如 v-on:click.prevent

修饰符

有些指令支持修饰符

  • @click.stop="add" (表示阻止事件传播/冒泡)
  • @click.prevent="add"(表示阻止默认事件)
  • @click.stop.prevent="add"(同事表示两种意思)

一共有多少修饰符

  • v-on支持的有.{keycode| keyAilas}

.stop .pevent .capture .selt .once .npassive .notive

  • 快捷键相关的有 .cltrl .alt .shift .mate .exact
  • 鼠标相关 .left .right .middel
  • v-bind 支持的有 .prop .camel .sync
  • v-model支持的 .lazy .number .trim

总结

搞清楚子个修饰符就够用

  • @click.stop="add" (表示阻止事件传播/冒泡)
  • @click.prevent="add"(表示阻止默认事件)
  • @keypress.enter="add"(按下enter触发 )
  • :money.sync="toay"(传入的值变了,外面的值也会改变)