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'判断事件名
