一、v-bind
v-bind用于绑定数据和元素属性
例如:绑定a标签的href属性
若不用v-bind 就只有用{{ }}形式
<div class="app">
<a v-bind:href="url">click me</a>
</div>
var app = new Vue({
el:'.app',
data:{
url:"https://www.baidu.com",
}
});
二、判断循环v-if 和v-for
v-if
<div id="app">
<h1 v-if="ok">true</h1>
<h1 v-else>false</h1>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
var vm = new Vue({
el:'#app',
data:{
ok:true
}
});
</script>
v-for
<div id="app">
<li v-for="item in items">
{{item.msg}}}
</li>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
var vm = new Vue({
el:'#app',
data:{
items:[
{msg:"niubi"},
{msg:"keai"},
]
}
});
</script>
可以取下标
<li v-for="(item,index) in items">
三、时间 v-on
注意VUE中的方法是methods
<script>
var vm = new Vue({
el:'#app',
data:{
message:"jsg"
},
methods:{
//方法必须定义在vue的method中
sayhi: function ()
{
alert(this.message)
}
}
});
</script>
v-on:+事件
事件
<div id="app">
<button v-on:click="sayhi">click me</button>
</div>
四、v-model 双向绑定
v-model本质上是一个语法糖。如下代码本质上是<input :value=“test” @input=“test = $event.target.value”>,其中@input是对输入事件的一个监听:value="test"是将监听事件中的数据放入到input,下面代码是v-model的一个简单的例子。在这边需要强调一点,v-model不仅可以给input赋值还可以获取input中的数据,而且数据的获取是实时的,因为语法糖中是用@input对输入框进行监听的。可以在如下div中加入
{{ test}}
获取input数据,然后去修改input中数据会发现 中数据随之改变1.文本框
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
var vm = new Vue({
el:'#app',
data:{msg:"134565",
}
});
</script>
<div id="app">
请输入文本:<input type="text" v-model="msg">{{msg}}
</div>
2.多选框如何展示
<div id="app">
男<input type="radio" name="sex" value="男" v-model="msg">
女<input type="radio" name="sex" value="女" v-model="msg">
<p>
选取了谁:{{msg}}
</p>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
var vm = new Vue({
el:'#app',
data:{msg:"",
}
});
</script>
多选框如何只能选一个:
设置同一个name,将value设置为不同的值即可
设置html radio 默认选中的方法:添加checked 属性,设置为 true,
v-model绑定的是目标的value
3.下拉框
<div id="app">
<select v-model="msg">
<option value="" disabled>----请选择----</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<p>value:{{msg}}</p>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
var vm = new Vue({
el:'#app',
data:{msg:"",
}
});
</script>
注意:v-model的表达式的初始值未能匹配任何选项 <select元素将会被渲染为“未选中”状态在ios中会报错
如何让第一行有
添加即可
<option value="" disabled>----请选择----</option>
五、Vue.component组件
感觉组件有点难
props可以传值从vue接受值
组件自己不能直接接受
<!--view层-->
<div id="app">
<lyj v-for="item in items" v-bind:qin="item"></lyj>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
Vue.component("lyj",{
props:['qin'],
template:"<li>{{qin}}</li>"
})
var vm = new Vue({
el:'#app',
data:{
items:["A","B","C"]
}
});
</script>
六、axios通信及mount方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
[v-clock]{
display:none;
}
</style>
<div id="app" v-clock>
<div>{{info.name}}</div>
<div>{{info.address.city}}</div>
<a v-bind:href="info.url">click me</a>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
var vm = new Vue({
el: "#app",
data(){
return{
info: {
name:null,
url:null,
address:{
street:null,
city:null,
country:null
}
}
}
},
mounted(){//钩子函数 链式编程
axios.get('../data.json').then(response=>(this.info=response.data));
}
});
</script>
</body>
</html>
七、computed 计算属性
我们的vue对象中有一个属性,使用缓存来 将不经常变化的属性的结果缓存,下一次可以不用重复,直接从内存中调取,节省系统的资源开销
注意事项:
- methods computed不能重名,重名之后会有优先级问题,method优先级高 特性:
- 作用于缓存中,和mybatis十分相似,一旦内部有属性变化就会立刻刷新
<div id="app" v-clock>
Now:{ {getTime()} }
Now2:{ {getTime2} }
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>
var vm = new Vue({
el: "#app",
data:{
message:'123'
},
methods:{
getTime:function(){
return Date.now();
}
},
computed:{
getTime2:function(){
this.message;
return Date.now();
}
}
});
</script>
八、插槽slot
我的理解slot像是一种段落
使用slot后可以在子组件内显示插入的新标签
注意:在使用slot时要 声明是哪一个组件 slot=“to_title” 如这样
<to_title slot="to_title" v-bind:title="title"></to_title>
<to_items slot="to_items" v-for="item in todoItems" v-
<div id="app">
<to_do>
<to_title slot="to_title" v-bind:title="title"></to_title>
<to_items slot="to_items" v-for="item in todoItems" v-bind:item="item"> </to_items>
</to_do>
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>
Vue.component("to_do",{
template: '<div>' +
'<slot name="to_title"></slot>'+
'<ul>' +
'<slot name="to_items"></slot>'+
'</ul>'+
'</div>'
});
Vue.component("to_title",{
props: ['title'],
template: '<p>{{title}}</p>'
});
Vue.component("to_items",{
props: ['item'],
template: '<li>{{item}}</li>'
});
var vm = new Vue({
el: "#app",
data: {
title: '课程列表',
todoItems: ['kuansheng说java','kuansheng说vue']
}
});
</script>
九. 自定义事件分发(重点)
由于在组件component里无法操作在vue里的元素
所以利用vue定义一个方法 绑定在slot组件里,组件在从前端slot里取操作
<div id="app">
<to_do>
<to_title slot="to_title" v-bind:title="title"></to_title>
<to_items slot="to_items" v-for="item in todoItems" v-bind:item="item"> </to_items>
</to_do>
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>
Vue.component("to_do",{
template: '<div>' +
'<slot name="to_title"></slot>'+
'<ul>' +
'<slot name="to_items"></slot>'+
'</ul>'+
'</div>'
});
Vue.component("to_title",{
props: ['title'],
template: '<p>{{title}}</p>'
});
Vue.component("to_items",{
props: ['item'],
template: '<li>{{item}}</li>'
});
var vm = new Vue({
el: "#app",
data: {
title: '课程列表',
todoItems: ['kuansheng说java','kuansheng说vue']
}
});
</script>
详解:this.$emit()函数
this.$emit(“function”,param); //其中function为父组件定义函数,param为需要传递参数