<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<!--
Vue数据监视的原理:
1.vue会监视data中所有层次的数据
2.如何检测【对象】中的数据?
通过setter实现监视,且要在new Vue时就传入要监测的数据
(1)对象中后追加的属性,Vue默认不做响应式处理
(2)如需给后面添加的属性做响应式,请使用如下API
Vue.set(target,index,vale)
Vue.$set(target,index,value)
3.如何监测【数组】中的数据?
通过包裹数组更新元素的方法实现,本质就是两件事:
(1)调用原生对应的方法对数组进行更新
(2)重新解析模板,进而更新页面
4.在Vue中修改数组中的某个元素一定要用如下方法:
1.使用这些API:push(),pop(),shift(),unshift(),splice(),sort(),reverse()
2.Vue.set()或Vue.$set()
5.Vue.set()或Vue.$set()不能给vm或vm的根数据对象添加属性
-->
<div id="app">
<h2>姓名:{{student.name}},年龄:{{student.age}}</h2>
<h2 v-if="student.sex">性别{{student.sex}}</h2>
<button @click="student.age++">年龄加1</button>
<button @click="addSex">添加性别</button>
<button @click="changeSex">改变性别</button>
<h2>朋友们数据</h2>
<ul>
<li v-for="item,index in student.friends">{{item.name}}:{{item.age}}</li>
</ul>
<button @click="addFri">添加一个朋友</button>
<button @click="delFri">删除一个朋友</button>
<button @click="changeFirName">修改第一个朋友姓名</button>
<ul>
<li v-for="item in student.hobby">{{item}}</li>
</ul>
<input type="text" v-model="keyWord" @keydown.enter="addHobby" placeholder="想要添加的爱好"/>
<button @click="addHobby">添加一个爱好</button>
<button @click="changeHobby">修改第一个爱好</button>
<button @click="guolv">过滤抽烟爱好</button>
<ul>
<li v-for="item in guolv()">{{item}}</li>
</ul>
</div>
<script type="text/javascript">
let app = new Vue({
el:"#app",
data:{
keyWord:'',
student:{
name:'tom',
age:20,
hobby:["拉屎",'睡觉','抽烟'],
friends:[
{name:'ji',age:8},
{name:'gi',age:10}
]
}
},
methods:{
//添加【对象】里的属性
addSex(){
Vue.set(this.student,'sex','男')
},
changeSex(){
this.student.sex = '女'
},
// 添加一个【数组】里的对象 数组新添属性要用数组的七个方法,才能生成响应式数据
addFri(){
this.student.friends.push({name:'jack',age:40})
},
// 删除【数组】里的一条信息
delFri(){
this.student.friends.pop();
},
//修改【对象】里的第一个人名字
changeFirName(){
//对象.name
this.student.friends[0].name = '大疤瘌'
},
//添加输入框的值
addHobby(e){
this.student.hobby.push(e.target.value)
},
//修改爱好【数组】的第一个值
changeHobby(){
Vue.set(this.student.hobby,0,'开车')
},
guolv(){
return this.student.hobby.filter((p)=>{
return p !== '抽烟'
})
}
}
})
</script>
</body>
</html>