| ✍️ Tangxt | ⏳ 2020-07-17 | 🏷️ 模板、指令、修饰符 |
template选项里xxx.vue 文件,即写在xxx.vue里边的template -> data必须为函数 -> 使用需要render:h => h(Xxx)🟡🟡obj.a🟡🟡 -> 表达式🟡🟡n+1🟡🟡 -> 写任何运算符🟡🟡fn(n)🟡🟡 -> 调用函数obj.a、n等这样的表达式,所返回的值是undefined or null的话,那么🟡🟡xxx🟡🟡这坨占位就不显示任何东西了,当作是从未来过一样……<div v-text="表达式"></div> -> 这也是展示内容的 -> 等价于 <div>🟡🟡表达式🟡🟡</div>

<div v-html="msg"></div> -> 可以把msg的内容渲染成html

v-pre不会对模板进行编译

什么是指令?
以
v-开头的属性就是指令 -> 指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM
其语法是怎样的?
v-指令名[:参数]=值,如v-if="xxx"、v-bind:href="url"、v-on:click="doSomething"
注意,2.6.0版本:
参数可以动态的,如v-on:[eventName]="doSomething",eventName可以是click、focus等值,说白了eventName是个变量哈(值类型是字符串)! -> 如果不是字符串值,那就是null值,而且是null值的话,那么意味着这个指令的绑定是无效的!即等于没写一样!
参数的取值,如果是表达式的话,请不要有空格或引号,如
v-bind:['foo' + bar],当然你也可以用计算属性替代复杂的表达式!
浏览器会把
attribute名全部强制转为小写,请不要用大写字符来命名属性名,如someAttr->someattr
动态参数的缩写(2.6.0+):<a :[key]="url"> ... </a>、<a @[event]="doSomething"> ... </a>
指令的取值?
单个 JavaScript 表达式 (
v-for是例外情况)
v-bind:src="xxx" -> 简写 :src="xxx"<div :style="{border:'1px solid red',height:'100px'}">hi</div> -> 注意,样式值得是字符串值哈,不然,「编译模板就会出错」 -> 对了,如果你把:style的值替换成变量,是不起效的!总之,我们这么写,是在为元素添加行内样式Tips:
在绑定class或style属性时,支持其它类型的值,如数组或对象
如:
<!-- class绑定 -->
<div :class="{red:ture}"></div>
<div :class="[classA, classB]"></div>
<!-- style 绑定 -->
<div :style="{color:ture}">111</div>
<div :style="[styleObjectA, styleObjectB]"></div>
v-on:事件名 -> 简写 @click="add"(正常人都用缩写)
v-on:click="add" -> 点击,执行add()v-on:click="xxx(1)" -> 点击才会执行xxx(1),可不会渲染模板就会马上执行xxxv-on:click="n+=1" -> 点击,执行n+=1,同样也是点击了才会执行!if……else
true为显示状态,false为隐藏状态v-else必须要和v-if匹配使用,v-else不能单独使用,只有v-if的值为false时,v-else模块才会显示出来v-for = "(v,k) in 对象或数组" :key="k" -> 指令写在需要重复的元素身上,如li元素使用
v-for就必须要在后面加上:key,否则会一直出现警告

相较于v-if,v-show的元素并咩有从DOM树中移出,而v-if则是从DOM树中移出了,意味着元素被销毁了!
根据表达式真假值,切换元素的
displayCSS属性
修饰符 (modifier) 是以半角英文句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定
如:.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()
<form v-on:submit.prevent="onSubmit">...</form>
相当于是给
onSubmit方法里边插入了一段特殊的万金油代码!
语法:
v-指令名:参数.modifier=值-> 如v-on:click.prevent
@click.stop="add" //表示阻止事件传播/冒泡
@click.prevent="add" //表示阻止默认动作
@click.stop.prevent="add" //修饰符可以串联,同时表示两种意思
@click.once="doThis" // 点击事件将只会触发一次
<input @keyup.13 = "submit"> // 按下enter键执行该函数
为了在必要的情况下支持旧浏览器,Vue提供了绝大多数常用的按键码的别名
.enter (回车)
.tab (Tab)
.delete (delete(删除)/BackSpace(退格))
.space (空格键)
.up (上箭头)
.down (下箭头)
.left (左箭头)
.right (右箭头)
{keycode|keyAlias}.stop.prevent.capture.self.once.passive.nativecamel.sync在使用vue的过程中,我们有时会遇到如下场景:子组件需要引用父组件的一个属性,并且修改。由于vue是不允许对外部的数据直接修改的,所以便需要在两个组件之间建立一个通信,让父组件去监听子组件发出的请求,然后再对相应的值做出改变。
this.$emit("update:money",money-100)
$event这个内置变量中,这样父组件中就能获取到这个值v-on:update:money="total=$event"
:money.sync="total"
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="utf-8">
<title>index2</title>
<style>
.green {
border: 3px solid lightgreen;
}
.red {
border: 3px solid lightcoral;
padding: 30px;
}
</style>
</head>
<body>
<div class="red">
Father 还有🟡🟡total🟡🟡
<child :money="total" v-on:update:money="fn"></child>
<!-- v-on:update:money="fn" <=> v-on:update:money="total=$event" -->
<!-- 上面 v-on:update:money="fn" 等价于 :money.sync="total" -->
<child :money.sync="total"></child>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
Vue.component('child', {
template: `
<div class="green">
<button @click="$emit('update:money',money-100)">花钱</button>
<span>🟡🟡money🟡🟡</span>
</div>
`,
props: ["money"]
})
let vm = new Vue({
el: '.red',
data() {
return {
total: 10000
};
},
methods: {
fn(event) {
// event 是子组件传递过来的值,天生就存在
console.log(event)
this.total = event;
}
}
})
</script>
</body>
</html>
效果:

运行过程是:
click 「btn」(花钱) -> 触发「update:money」事件 -> 通知父组件 -> 父组件监听了「update:money」事件,执行fn方法,fn的第一个参数值就是money-100,改变父组件的total的状态为money-100 -> 更新子组件的money -> 完成花钱动作
这是一个完整的发布订阅模式
注意:这是先更新了在父组件这个区域内,写在子组件上的
:money,然后再去更新子组件里边的money,也就是说total计算完后,子组件的money才确定有多少钱!
所以:
vue 修饰符sync的功能是:当一个子组件需要改变了一个 prop 的值时,会通知其父组件进行同步的修改。
Vue 发明了一种修饰符
.sync(可以封装监听事件的操作) -> 本质来说.sync其实是一个 语法糖关于
$event,为啥有$,以防data旗下有个event属性!
Tips:
props 外部数据$emit 可以触发事件,并传参$event 可以获取到 $emit 传入的参数XML 语法,可不是HTML🟡🟡🟡🟡插入表达式v-bind、v-on、v-html等指令操作DOMv-if,v-for等指令实现条件判断与循环.sync -> 不要让子组件自己修改父组件通过props传过来的值,子组件你自己维护好自己的data就好了,至于props里边的数据更新,你子组件就通知父组件更新就好了!