<div id="app">
<p>{{msg}}</p>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
msg:"个表,你等着!"
},
methods:{}
});
</script>
说明:
el:操作的区域
data:存放一些参数对象
methods:定义一些自定义方法
1、v-cloak、v-text、v-html、v-bind、v-on语法运用
<div id="app">
<p v-cloak>++++++++{{msg}}--------</p>
<h4 v-text="msg">------------------</h4>
<h3 v-html="msg2">1231</h3>
<input type="button" value="按钮" v-bind:title="mytitle+',大到你无法想象!'">
<input type="button" value="绝招" v-on:click="show">
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
msg:"我在这里等你",
msg2:"<p style='font-size:14px;color:red'>你是魔鬼吗?</p>",
mytitle:"这是一个功能很强大的按钮"
},
methods:{
show:function(){
alert('我弹弹弹弹弹弹!');
}
}
});
</script>
v-cloak:元素加载完毕后,再一并展示出来,解决插值表达式闪烁的问题,等{{msg}},加载完后,该元素再一并展示出来
<p v-cloak>++++++++{{msg}}--------</p>
v-text:元素中的内容进行覆盖,msg指向的内容将覆盖,元素里面的内容
<h4 v-text="msg">------------------</h4>
v-html:元素中的内容会进行覆盖,且将msg2指向的内容将转换为html语法来解析
<h3 v-html="msg2">1231</h3>
v-bind:用于绑定对象,同时,也可以解析js表达式,简写语法为v-bind:title=:title
<input type="button" value="按钮" v-bind:title="mytitle+',大到你无法想象!'">
v-on:绑定方法,简写语法为v-on:click=@click
<input type="button" value="绝招" v-on:click="show">
2、vm内部访问参数或者方法需用this
<div id="app">
<input type="button" value="跑起来" @click="lang">
<input type="button" value="停下来" @click="stop">
<h3>{{msg}}</h3>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
msg:"逮!你别跑,吃俺老孙当头一棒",
intervalId: null // 在data上定义 定时器Id
},
methods:{
lang(){
if (this.intervalId != null) return;
this.intervalId = setInterval(() => {
var start = this.msg.substring(0, 1)
// 获取到 后面的所有字符
var end = this.msg.substring(1)
// 重新拼接得到新的字符串,并赋值给 this.msg
this.msg = end + start
}, 400)
},
stop() { // 停止定时器
clearInterval(this.intervalId)
// 每当清除了定时器之后,需要重新把 intervalId 置为 null
this.intervalId = null;
}
}
});
</script>
在 VM实例中,如果想要获取 data 上的数据,或者 想要调用 methods 中的 方法,必须通过 this.数据属性名 或 this.方法名 来进行访问,这里的this,就表示 我们 new 出来的 VM 实例对象
3、修饰符运用
.stop 阻止冒泡,冒泡(点击div里面的按钮,由里到外往外冒泡),终止在button按钮
<div class="inner" @click="div1Handler">
<input type="button" value="戳他" @click.stop="btnHandler">
</div>
.prevent 阻止默认行为,中断了跳转
<a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a>
.capture 实现捕获触发事件的机制,由外到里,实现捕获事件
<div class="inner" @click.capture="div1Handler">
<input type="button" value="戳他" @click="btnHandler">
</div>
.self 实现只有点击当前元素时候,才会触发事件处理函数,由里到外,触发时间函数
<div class="inner" @click="div1Handler">
<input type="button" value="戳他" @click="btnHandler">
</div>
.once 只触发一次事件处理函数,触发一次后,就按照默认行为进行下去
<a href="http://www.baidu.com" @click.prevent.once="linkClick">有问题,先去百度</a>
.self 只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为
<div class="outer" @click="div2Handler">
<div class="inner" @click.self="div1Handler">
<input type="button" value="戳他" @click="btnHandler">
</div>
</div>
4、v-model实现表单元素和model的数据的双向绑定
<div id="app">
<input type="text" v-model="msg">
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
msg:"为中华崛起而读书"
},
methods:{}
});
</script>
v-model:双向绑定了表单元素,表单元素值发生变化,model中的数据也会发生变化
5、样式绑定与三元运算符运用
<div id="app">
<h1 class="red thin">Hello World!</h1>
<h1 v-bind:class="['red', 'thin']">Hello World!</h1>
<h1 v-bind:class="['thin', flag?'italic':'red']">Hello World!</h1>
<h1 v-bind:class="['thin','red',{'active':flag}]">Hello World</h1>
<h1 v-bind:class="classobj">Hello World!</h1>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
flag:true,
classobj:{red:false,thin:true,italic:true,active:true}
},
methods:{}
});
</script>
使用三元运算符提供代码可读性
<h1 v-bind:class="['thin','red',{'active':flag}]">Hello World</h1>
绑定的对象的属性可以为类名
<h1 v-bind:class="classobj">Hello World!</h1>
6、for循环使用(循环普通数组\数组对象\对象\数字)
<div id="app">
<p v-for="(item,i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
<p v-for="(item,i) in list2">索引值:{{i}}---名字:{{item.name}}---年龄:{{item.age}}</p>
<p v-for="(value,key,i) in user">索引值:{{i}}---键:{{key}}---值:{{value}}</p>
<p v-for="count in 10">这是第 {{ count }} 次循环</p>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
list:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],
list2:[
{name:'张三',age:'20'},
{name:'李四',age:'18'},
{name:'王二',age:'19'}
],
user:{name:'张三',age:'20',like:'读书'}
},
methods:{}
});
</script>
循环普通数组对象,第一个参数item,为具体的数值,第二项i,为索引值,第三项list为循环的对象,这三项名称都不是固定写法,可任意命名
<p v-for="(item,i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
循环数组对象,一个参数item,为循环的对象,具体的数值,则需要item.名称,得到具体值,第二项i,为索引值,第三项list2为循环的数组对象,这三项名称都不是固定写法,可任意命名
<p v-for="(item,i) in list2">索引值:{{i}}---名字:{{item.name}}---年龄:{{item.age}}</p>
循环对象,第一个参value,数为数值,第二项key为具体的键,第三项i,为索引值,第四项user为循环的对象,这四项名称都不是固定写法,可任意命名
<p v-for="(value,key,i) in user">索引值:{{i}}---键:{{key}}---值:{{value}}</p>
循环数字
<p v-for="count in 10">这是第 {{ count }} 次循环</p>
7、for循环key关键字使用
<div id="app">
<label>id:
<input type="text" v-model="id">
</label>
<label>name:
<input type="text" v-model="name">
</label>
<input type="button" value="增加" v-on:click="add">
<p v-for="item in list" v-bind:key="item.id">
id:{{item.id}}---名字:{{item.name}}
</p>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
id:'',
name:'',
list:[
{id:1,name:"余键"},
{id:2,name:"姚晶"}
]
},
methods:{
add(){
this.list.unshift({id:this.id, name:this.name})
this.id="";
this.name="";
}
}
});
</script>
v-for 循环的时候,key 属性只能使用 number获取string。
key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值。
8、v-if、v-show用法
<div id="app">
<input type="button" value="true" v-on:click="settrue">
<input type="button" value="false" v-on:click="setfalse">
<h1 v-if="flag">你知道学习的重要性吗?</h1>
<h1 v-show="flag">你知道思考的重要性吗?</h1>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
flag:true
},
methods:{
settrue(){
this.flag=true;
},
setfalse(){
this.flag=false;
}
}
});
</script>
v-if 的特点:每次都会重新删除或创建元素,有较高的切换性能消耗
v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式,有较高的初始渲染消耗
如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show
如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if