https://element.eleme.cn/#/zh-CN/component/icon 网络快速成型工具,icon图标
vue生命周期/钩子函数
- vue实例化
- beforeCreate:实例化前
- 组件未创建,不能访问数据,data def 均为undefined
- created:实例化后
- beforeCreate:实例化前
- vue挂载视图
- deforeMount:视图挂载前
- mounted:视图挂载后
- vue数据更新
- beforeUpdate:数据更新前
- updated:数据更新后
vue销毁
M:模型(Model):对应data中的数据
- V:视图(view):模板
-
初始化值
data:{
Test: '',
count: 0,
confirm: false,
arr: [],
error: null
}
vue模板
vue模板支持的js表达式
{{ number+1 }}
表达式{{ ok? 'YES': 'NO' }}
三目运算{{ message.split('').reverse().join('') }}
函数调用<div v-bind:id="'list-' + id"></div>
字符拼接
- 不支持语句:
{{ var a=1 }}
语句{{ if(ok){return message}}
流程控制vue结构
var v = new Vue({
el: '#app',
data: { /* 数据储存 */ },
computed: { /* 属性计算 */ },
watch: { /* 数据监视 */}
})
// el外部写法
v.$mount('#app');
// data对象式写法
data: function() {
return { name:'' }
}
data(){
return { name:''}
}
// 箭头函数会使this不指向vue,而是指向window
()=>{}
vue指令
vue指令是带有v-前缀的特殊attribute(属性 ),指令attribute的值预期是单个JavaScript表达式
<p v-if="seen">
判断指令:根据表达式seen值的真假来插入/移除p元素
</p>
<p v-else-if="seen"></p>
<p v-else></p>
<p v-show="seen">
值为true显示,值为false隐藏
可以写入值,可以写入表达式(结果为布尔值)
v-show为true时会删除样式(display:none)
v-show为false时会增加样式(display:none)
与if的区别:
if是删除插入标签,show是隐藏和显示
如果频繁切换使用if会有更高的渲染开销
</p>
<a v-bind:href="url">
v-bind:[attributeName]="val"
href是参数(属性名),告知v-bind指令将元素href属性与url值绑定
缩写::href="rul" :[key]="val"
</a>
<a v-on:click="fun(val)">
v-on:[eventName]="doSomething"
监听属性,触发事件后执行fun(var)函数
缩写: @click="fun(val)" @[event]="doSomething"
</a>
<div class='basic' :class='clasz'>
class类添加
class属性与clasz属性进行绑定,可以传入样式数组
也能传入对象,{bg-blue: true},true为传入,false不传入
</div>
<div class='basic' :style="{fontSize: fsize+'px';}">
style样式添加
获取data数据再传入,可以传入对象{样式属性:样式值}
[map1,map2]可以传入多个对象
</div>
计算属性和监听属性
{{ message.split(‘’).reverse().join(‘’) }} 如果将大量的计算属性放置到模板中,会让模板过重且难以维护 因此vue新增了计算属性
computed
,计算属性与函数进行绑定再返回值
<!-- 计算属性 -->
<div id="example">
<p>原始信息:{{ message }}</p>
<p>计算翻转后信息:{{ reversedMessage }}</p>
</div>
<script>
var vm = new Vue({
el: '#example',
data: {
message: 'hello'
},
computed: {
reversedMessage: function(){
return this.message.split('').reverse().join('')
}
}
})
// 计算属性在计算完后会进行缓存,在多次使用的情况下,只会调用一次
// 只有计算的值发生改变时,才会进行调用,然后写入缓存中
</script>
<div id="app">
天气怎么样?{{info}}--{{a}}
<br>
<!-- <button @click="isHot=!isHot">按钮</button> -->
<button @click="a++">按钮</button>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
a: 1,
// isHot: true
},
computed:{
info(){
// return this.isHot? '炎热': '凉爽'
return this.a&1==1? '炎热': '凉爽'
}
},
watch: {
// a:{
// immediate: true, // 初始化时,调用一次handler
// deep: true, // 监视多层结构中的属性变化
// 在调用多层的情况下([a,b]),只会监听外部,不会监听内部
// handler(newValue, oldValue) { // 修改值时调用
// console.log('a被修改',newValue, oldValue)
// }
// },
// 简写
a:function(newValue, oldValue){
console.log('a被修改',newValue, oldValue)
}
},
})
// 外部写法
// vm.$watch('a', {
// immediate: true,
// deep: trueu,
// handler(newValue, oldValue){
// console.log('a被修改',newValue, oldValue)
// }
// })
// 简写
// vm.$watch('a', (newValue, oldValue)=>{
// console.log('a被修改',newValue, oldValue)
// })
事件修饰符
- prevent:阻止默认事件
@click.prevent
在a标签能阻止跳转
- stop:阻止事件冒泡
@click.stop
有多个事件时,不会叠加触发
- once:事件只触发一次
@click.once
事件只能使用一次
- capture:使用事件的捕获模式
@click.capture
先执行capture的事件
- self:只有event.target是当前操作元素才触发事件
@click.self
只有单击当前才会触发
passive:事件的默认行为立即执行,无需等待事件回调执行完毕
$event 获取事件
event.target.innerText
获取事件名event.type == 'click'
判断事件名