(1).vue3的挂载
1.createApp创建
vue3的挂载方法不是通过new Vue挂载的,而是通过createApp创建和mount 挂载的
<body>
<div id="app"></div>
<script src="vue3引入"></script>
<script>
const Counter = {
data(){
return {
conunter:0
}
}
}
let app = Vue.createApp(Counter)
app.mount('#app')
</script>
</body>
2.es5的方式模板挂载/及手动挂载
let vm = new Vue({
template:'<div>M</div>'
})
vm.$mount('#app');//手动挂载
如果mount没有传参数,那么就会渲染成document文档外的元素
document.getElementById('id').appendChild(vm.$el)//es5挂载
(2).vue2中的api
1.$options
let vm = new Vue({
...
})
log(vm.$options)
2. $watch('dataname',fn(new ,old){})
可以监听到新值的渲染,并可以从参数中拿到data中新的值和旧的值
let vm = new Vue({
el:'#app',
data(){
return {
message: 'Hello'
}
},
template:'{{message}}'
})
vm.$watch('message',function(new,old){
})
vm.message = '1'
vm.message = '2'
如果多次改变,也只会执行一次。newValue为最后一次变更的值,oldValue为最初初始的值
其中vue改变值并不是同步,立马生效的,而是在下一轮loop中才会执行,
vm.message = 'xx'
console.log(vm.$el.textContent === 'xx') //false
Vue.nextTick(function(){
console.log(vm.$el.textContent === 'xx')//true
})
这里会有个bug 如果你div中有空格 第二个会打印false
3.$delete(dataname,key)
4.$set(dataname,key,value)
(3).指令
1.v-once
<body>
<div id="app">
<div v-once>{{message}}</div>
</div>
<script src="vue2引入"></script>
<script>
let vm = new Vue({
el:'#app',
data(){
return{
message:'Hello'
}
}
})
vm.message = 'Bye'
</script>
</body>
此时只会是hello bye是无效的
2.v-html
可以将值编译成dom元素,会将这个节点下所有的do'm都替换成编译后的dom
<body>
<div id="app">
<div v-html="imgSrc">xx</div>
</div>
<script src="vue2引入"></script>
<script>
let vm = new Vue({
el:'#app',
data(){
return{
imgSrc:'<img onerror="console.log(`1`)">M</div>'
}
}
})
vm.message = 'Bye'
</script>
</body> do'm元素中不会有xx
那么就会导致v-html时会有漏洞风险,可以通过纯文本插件(sanitize-html)来处理
3.v-if/v-for/v-show
<div v-if="false">
<div v-for="color in colors">{{color}}</div>
</div>
页面上看不到任何结果,dom也没有改变
<div v-show="false">
<div v-for="color in colors">{{color}}</div>
</div>
页面上看不到任何结果,dom改变了
v-show是不能写在template标签上的,是不生效的。得写在div上得
<template v-show = "true">
xx
</template> 不会做判断也会渲染出xx
v-if和v-for不能连用,v-for会先执行循环3个div出来,而if得false又会把他们删除掉
<div v-for="color in colors" v-if="false" >
<div>{{color}}</div>
</div> 页面是空的
(4).动态绑定类名
<div :class="[{'active':flag},'test']"></div>数组得第一项必需是对象
<div :class="{'active':true,'test':true}]"></div>
(5).动态样式
<div :style="[{color:'red'},{font-size:size}]"></div>
<div :style="{color:'red',dispaly:'none'}]"></div>