vue学习笔记

<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
Vue 的生命周期
created:function(){实例创建完成后调用,此阶段完成了数据的观测等,但尚未挂载,需要初始化处理一些数据时会比较有用},
mounted:function(){el 挂载到实例上后调用,一般我们的第一个业务逻辑会在这里开始},
beforeDestroy:function(){实例销毁之前调用。主要解绑一些定时器,addEventListener监听等}

插值与表达式
{{}} 显示双向绑定的数据,可以做简单的运算,三元运算
v-pre   跳过这个元素和它的子元素的编译过程
v-mode="data"  绑定vue的数据,修改内容会改变vue数据
v-html="data"  直接显示数据内容,内容不会被渲染

过滤器 处理简单的文本转换
{{date|formatDate}}
filters : { 
    formatDate :function((value)){//TODO}
}
可以串联多个过滤器,可以传参数,第一个参数是数据本身

计算属性
{{fullname}}
computed:{
    fullname: function{
    	get: function(){
    	    //计算属性可以使用当前Vue实例this,也可以使用其他实例的数据
    		return this.firstName+' '+this.lastName;
	}
}
区别于methods  
computed适用需要缓存和处理大数据的情况,Date.now()不会动态更新
methods不会缓存是实时更新的,Date.now()会动态更新
操作样式
绑定class  
v-bind:class 简写 :class
<div class="static" :class="{'active':isActive,'error':isError}">aaaaaa</div>
data:{
		isActive:true,
		isError:false,
		classA:'active',
		classB:'noactive',
		classC:'error'
	}
渲染结果<div class="static active"></div>
使用三元表达式
<div :class="[isActive ? classA:classB,classC}">aaaaaa</div>
使用计算属性
<div :class="classes"></div>
computed: {
    classes:function (){ 
        return { 
            active:this.isActive && !this.error, 
            'text-fa': this.error && this.error.type === 'fail'
            }
        }
    }
使用数组
<div :class="[activeCls,errorCls]"></div> 
data : {  
    activeCls:'active', 
    errorCls:'error'
}

绑定内联样式
<div :style="{'color':color,'fontSize':fontSize+'px'}">文本</div>
data:{
    color:'red',
    fontSize:14
}
css属性使用驼峰命名或短横分隔,渲染结果
<div :style="color:red;font-size:14px;">文本</div>
复杂样式最好写在data或computed
<div :style="styles">文本</div>
data:{
    styles:{
        color:'red',
        fontSize:14+'px'
    }
}
应用多个样式数据
<div :style="[styleA,styleB]">文本</div>

内置指令

1,常用指令
1,v-bind    动态更新 HTML 元素上的属性,简写为 :
<a v-bind:href="url">链接</a
2,v-on      用来绑定事件监听器,简写为 @ 
<button v-on:click="handleClose">点击隐藏</button>
方法都写在Vue实例的methods属性内,还可绑定dblclick keyup,mousemove等
方法与方法可以互相调用
3,v-once  定义它的元素或组件只渲染一次,包括元素或组件的所有子节点
<span v-once>{{ message }}</span> 
条件渲染指令
1,v_if、v_else_if、v_else
<p v-if="status === 1">当 status为 1 时显示该行</p>
<p v-else-if="status === 2">当 status 为2 时显示该行</p>
<p v-else>否则显示该行</p>
默认会复用组件,不会重新渲染,不需要复用可以在组件上加上 key属性
<template v-if="type ==='name'">
<label>用户名 </label>
<input placeholder="输入用户名" key="name-input">
</template> 
<template v-else> 
<label>邮箱 </label>
<input placeholder="输入邮箱" key="eail-input">
</template> 
<button @click="handleToggleClick">切换输入类型</button>
methods:{
    handleToggleClick: function() { 
        this.type=this.type ==='name'?'mail':'name'; 
}}

2,v_show 用法与v_if基本一致。
v_if与v_show的区别 
v_show只是改变CSS的display,无论条件是否成立都会被编译渲染,适用于频繁切换
v_if 会根据条件销毁和重建元素,表达式初始为fals,这一开始就不会被渲染,条件成立才会开始编译
列表渲染指令
v-for="item in items"  使用in 和of 一样,可选index
<ul id="app">
	<li v-for="(book,index) of books">{{index}}-{{book.name}}</li>
</ul>
data:{books:[{name:'aaJavaScripaa'},{name:'bbbavaScrip'},{name:'cccc'},{name:'ddd'}]}
遍历属性对象 
<span v-for="value in user">{{value}} </span> 
data:{user:{name:'熊大',age:14,weight:'69kg',job:'开发'}}
<li v-for= "(value,key,index) of user">
    {{index}} - {{key}} : {{value}} 
</li> 
遍历数组时,操作数组会实时更新视图
push() 
pop() 
shift() 
unshift()
splice() 
sort()
reverse()
app.books.push({name:'fffff'});
不会改变原始数据的方法:
filter()
concat()
slice()
app.books=app.books.filter(function(item){
        return item.name.match(/Scrip/);
    }
)
修改数组,无法通过app.books[3]={...}修改,正确方式:
Vue.set(app.books,3,{name:'《java进阶》'});
或者
app.books.splice(3,1,{name:'《java进阶》'})
webpack中
this.$set(app.books,3,{name:'《java进阶》'})

过滤与排序
<template v-for="book in filterBooks">
    {{name}}
</template>
computed:{ 
        //过滤
	    filterBooks:function(){ 
	        return this.books.filter(function (book) { 
	            return book.name.match(/Scrip/); })
	    },
	    //排序
	    sortBooks:function(){
	        return this.books.sort(function(a,b){
	            return a.name.length<b.name.length;
	        })
	    },
	    //过滤+排序 串联方法
	    filterAndSort:function(){
	            return this.books.filter(function (book) { 
	                return book.name.match(/Scrip/); })
    	            .sort(function(a,b){
    	                return a.name.length<b.name.length;
    		        })
		    }
	    
    }
方法与事件
v-on:  简写为@    Vue提供特殊变量$event  可以访问原生DOM事件
<a href="http://www.apple.com" @click="handleClick('禁止打开',$event)">打开链接</a>
methods:{ 
    handleClick:function (message,event){
        event.preventDefault(); 
        window.alert(message);
    })
}
修饰符
.stop     阻止事件
.prevent  不再重载
.capture  使用事件捕获模式
.self     只当事件在该元素本身(而不是子元素)触发时回调
.once     只触发一次

监听键盘事件,使用按键修饰符,例如:
<!--只有在 keyCode 13 时调用 submit()-->
<input @keyup.13="submit">
自定义全局KeyCode 
Vue.config.keyCodes.fl = 112;
定义之后可以使用 @keyup.fl
常用快捷keyCode别名
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right
这些按键修饰符也可以组合使用,或和鼠标一起配合使用:
.ctrl
.alt
.shift
.meta  (Mac 下是 Command 键, Windows 下是窗口键)
组合使用示例
<!--Shift + S-->
<input @keyup.shift.83="handleSave">
<!-- Ctrl + Click --> 
<div @click.ctrl="doSomething">Do something</div> 
表单与v-model
文本框与文本域使用 v-model 绑定数据,元素初始写入的内容不会显示

单选按钮  
单独使用可以直接使用v_bind绑定一个布尔值,
组合使用可以使用value和v-model配合
<input type='radio' v-model='picked' value='html'><lable for='html'>HTML</lable></br>
<input type='radio' v-model='picked' value='js'><lable for='js'>JavaScript</lable></br>
<input type='radio' v-model='picked' value='css'><lable for='css'>CSS</lable></br>
<p>选择的是:{{picked}}</p>
data:{picked:'js'}

复选框    
单独使用v-model绑定布尔值
组合使用 多个复选框绑定到一个数组类型的数据,勾选某一项value的值会自动push到这个数组中
<input type='checked' v-model='checked' value='html'><lable for='html'>HTML</lable></br>
<input type='checked' v-model='checked' value='js'><lable for='js'>JavaScript</lable></br>
<input type='checked' v-model='checked' value='css'><lable for='css'>CSS</lable></br>
<p>选择的是:{{checked}}</p>
data:{checked:['html','css']}

单选下拉列表
<select v-model="selected">
	<option value="html">html</option>
	<option value="js">js</option>
	<option value="css">css</option>
</select>
data:{selected:'css'}
多选下拉列表
<select v-model="selected" multiple>
	<option value="html">html</option>
	<option value="js">js</option>
	<option value="css">css</option>
</select>
data:{selected:['css','html']}
绑定值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

占星安啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值