<div id='app'>
<p>{{messenge}}</p>
//mustache语法中,可以执行简单的表单式
<p>{{firstname + lastName}}</p>
</div>
<script>
const app = new Vue({
el:'#app',
data:{
messenge:'今天天气不错',
lastName:'cute',
firstname:'liuixoahua'
}
})
</script>
<div id='app'>
<p>{{messenge}}</p>
<p v-once>{{messenge}}</p>
</div>
<script>
const app = new Vue({
el:'#app',
data:{
messenge:'天气不错',
}
})
</script>
<div id="app">
<h2>{{url}}</h2>
<h2 v-html="url"></h2>
</div>
<script>
const app = new Vue({
el: '#app',
data: {
url: '这是一个链接'
}
})
</script>
<div id="app">
<h2>{{url}},天气不错</h2> //结果为 你好呀,天气不错
<h2 v-text="url">,天气不错</h2> //结果为 你好呀
</div>
<script>
const app = new Vue({
el: '#app',
data: {
url: '你好呀',
}
})
</script>
<div id="app">
<h2>{{url}}</h2> //结果为 你好呀
<h2 v-pre>{{url}}</h2> //结果为 {{url}}
</div>
<script>
const app = new Vue({
el: '#app',
data: {
url: '你好呀',
}
})
</script>
<div>
<img v-bind:src='imgSrc'>
<a v-bind:href='aHref'>百度</a>
</div>
<script>
const app = new Vue({
el:'#app',
data:{
imgSrc:'http://www.tezhongzhuangbei.com/ing.png',
aHref:'http://www.baidu.com'
}
})
</script>
<p :class="{'Active':isActive}"></p> //直接使用{}绑定一个类
<p :class="{'Active':isActive,'new':isNew}"></p> //通过判断,传入多个值
<p class='english' :class="{'Active':isActive,'new':isNew}"></p> //普通类存在,并不冲突
<p class="title" :class="classes"></p>
//用法四:如果过于复杂,可以放在一个methods或者computed中 注:classes是一个计算属性
<p :class="['active']"></p> //绑定一个值
<p :class="['active','news']"></p> //传入多个值
<p class='bad' :class="['active','news']"></p> //普通类存在,并不冲突
<p class="title" :class="classes">Hello World</p>
//用法四:如果过于复杂,可以放在一个methods或者computed中 注:classes是一个计算属性
<p :style="{color:thisColor,fontSize:font + 'px'}">{{messenge}}</p>
<p :style="[baseCss,overStyle]"></p>
对数据进行转换后显示;计算属性是写在computed选项中的
<div id='app'>
<h2>{{name}} {{firstName}}</h2>
<p>{{fullName}}</p>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
name:'mx',
firstName:'l'
},
computed:{
fullName(){
return this.name + this.firstName;
}
}
})
</script>
<div id='app'>{{totlePrice}}</div>
<script>
const app = new Vue({
el:'#app',
data:{
books:[
{id:110,name:'haha',price:119},
{id:110,name:'haha',price:123},
{id:110,name:'haha',price:142},
{id:110,name:'haha',price:132},
]
},
computed:{
totlePrice:function(){
const result;
for(var i = 0;i < this.books.length;i++){
result += this.books[i].price;
};
return result;
}
}
})
</script>
计算属性的setter和getter,setter代码如下
computed:{
fullName:{
set:function(newValue){
const names = newValue.split('');
this.firstName = names[0];
this.lastName = names[1];
},
get:function(){
return this.firstName + ',' + this.lastName;
}
}
}
计算属性缓存
methods和computed的区别:computed有缓存,多次调用时,智慧计算一次;但是methods会多次调用
<div id='app'>
<h2>点击次数:{{counter}}</h2>
<button v-on:click='counter++'>按钮点击</button>
<button @click='btnclick'>按钮点击</button>
</div>
<script>
const app = new Vue({
el:'#app',
data:{
counter:0
}
methods:{
btnclick(){
this.counter++;
}
}
})
</script>
<div id='app'>
<h2>{{counter}}</h2>
<button @click='btnclick'>+1</button>
<button @click='btnclickTen(10,$event)'>+10</button>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
counter:0
},
methods:{
btnclick(event){
console.log(event);
this.counter ++;
},
btnclickTen(count,event){
console.log(event);
this.counter += count;
}
}
})
</script>
//.stop - 调用enent.stopPropagation(); 停止冒泡
//.prevent - 调用event.preventDefault();阻止默认事件
//.{keyCode | keyAlias} - 只当事件是从特定键盘触发时才调用
//.native - 监听组件根元素的原生事件
//.once - 只触发一次
- 停止冒泡
<button @click.stop="doThis"></button>
- 阻止默认行为
<button @click.prevent="doThis"></button>
- 阻止默认行为,没有表达式
<form @submit.prevent></form>
- 串联修饰符
<button @click.stop.prevent="doThis"></button>
- 键修饰符,键别名
<input @keyup.enter="onEnter">
- 键修饰符,键代码
<input @keyup.13="onEnter">
- 点击回调只会触发一次
<button @click.once="doThis"></button>
<div id='app'>
<h2 v-if='score >= 90'>1</h2>
<h2 v-else-if='score >= 80'>2</h2>
<h2 v-else-if='score >= 70'>3</h2>
<h2 v-else>4</h2>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
score:12
}
})
</script>
v-show指令
v-show的用法和v-if相似,也用来决定一个元素是否渲染
1.两者对比:v-if条件为false,不会有对应的元素在dom中;v-show条件为false时,仅仅是将元素的display属性设置为none。
2.两则选择:当频繁切换显示隐藏时,选择v-show;当只有一次切换时,选择v-if
<div id='app'>
<button @click='toggle'>切换显示隐藏</button>
<button is-show='isShow'>是否显示</button>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
show:true,
},
methods:{
toggle(){
this.show = !this.show;
}
}
})
</script>
<div id='app'>
<ul>
<li v-for='item in apples'>{{item}}</li>
<li v-for='(item,index) in apples'>{{index+1}}{{item}}</li>
<li v-for='(value,key,index) in info'>{{value}}-{{key}}-{{index}}</li>
</ul>
</div>
<script>
const app = new Vue({
el:'#app',
data:{
apples:['one','two','three'],
info:[name:'lmx',age:'23',width:'12']
}
})
</script>
v-model本质上包含两个操作:v-bind绑定value的一个属性;v-on给当前元素绑定input事件
<div id='app'>
<input type='text' v-model='messenge'>
{{messenge}}
</div>
<script>
var app = new VUe({
el:'#app',
data:{
messenge:'你好呀'
}
})
</script>
<div id='app'>
<label for='male'>
<input type='redio' id='male' v-model='sex'>男
</label>
<label for='female'>
<input type='redio' id='female' v-model='sex'>女
</label>
<p>{{sex}}</p>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
sex:'女',
}
})
</script>
2.v-model:checkbox
单个多选框, v-model为布尔值,此时input的值并不影响v-model的值
多个复选框,对应data中,是一个数组,当选中其中一个时,就会把value的值添加到数组中
<div id='app'>
<label for='check'>
<input type='checkbox' id='check' v-model='checked'>统一协议
</label>
<p>{{checked}}</p>
<label><input type='checkbox' v-model='hobbies' value='1'>1</label>
<label><input type='checkbox' v-model='hobbies' value='2'>2</label>
<label><input type='checkbox' v-model='hobbies' value='3'>3</label>
<p>{{hobbies}}</p>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
checked:false,
hobbies:[]
}
})
</script>
3.v-model:select
单选:只能选中一个值,会将对应的value值赋值到mySelect中
多选:可以选中多个值,v-model绑定的是一个数组
<select name='abc' v-model='mySelect'>
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="榴莲">榴莲</option>
<option value="葡萄">葡萄</option>
</select>
<h2>您选择的水果是: {{mySelect}}</h2>
<!--2.选择多个-->
<select name="abc" v-model="mySelects" multiple>
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="榴莲">榴莲</option>
<option value="葡萄">葡萄</option>
</select>
<h2>您选择的水果是: {{mySelects}}</h2>
<script>
const app = new Vue({
el: '#app',
data: {
mySelect: '香蕉',
mySelects: []
}
});
</script>
4.值绑定
值绑定就是动态的给value赋值
<label v-for='item in items' :for='item'>
<input type='checkbox' :value='item' :id='item' v-model='nobbies'>{{item}}
</label>
<script>
var app = new Vue({
el:'#app',
data:{
items:['西瓜','南瓜','冬瓜','黄瓜'],
hobbies:[]
}
})
</script>
5.修饰符
//修饰符lazy
<input type='text' v-model.lazy='messenge'>
<h2>{{messenge}}</h2>
//修饰符number
<input type='text' v-model.number='age'>
<h2>{{age}}</h2>
//修饰符trim
<input type='text' v-model.trim='sex'>
<h2>{{sex}}</h2>