Vue--简单实现微博发布功能和实现tab栏

1、微博发布功能

html 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   <div id = "div1">
       <textarea name="" id="" cols="30" rows="10" v-model="msg"></textarea>
       <button @click="sub(n)">发布</button>
       <ul>
           <li v-for="(item,index) in list">{{item.con}}<span @click="del(n)">X</span></li>
       </ul>
   </div>
<!-- 引入vue文件  -->
   <script src="js/vue.js"></script>
   <script>
       new Vue({
           el:"#div1",
           data:{
               msg:"",
               list:[
                   {
                   con:"123"
               },
               {
                   con:"456"
               }
               ]
           },
           methods:{
               sub(){
                  this.list.unshift({con:this.msg})
                  this.msg="";
               },
               del(n){
                   this.list.splice(n,1)
               }
           }
       })
   </script>
</body>
</html>

页面效果:
在这里插入图片描述

2、tab栏

html代码:

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
		<style>
			.current{
				background: lime;
			}
	    </style>
	</head>
	<body>
		<div id="app">
			
			<ul>
				<li v-bind:class="{con:true,current:num==index}" v-for="(item,index) in top" v-on:click="change(index)">{{item}}</li>
			</ul>
			<main>
				<div v-show="num==index" v-for="(item,index) in con">{{item}}</div>
			</main>
		</div>

		<script src="js/vue.js"></script>
		<script>
			new Vue({
				el:'#app',
				data:{
					num:0,
					top:['新闻','娱乐','体育','财经'],
					con:['新闻内容','娱乐内容','体育内容','金融内容']
				},
				methods:{
					change(a){
						this.num=a;
					}
				}
			})
		</script>
	</body>
</html>

页面效果:
在这里插入图片描述

3、computed和watch有何区别?

(选自:https://www.cnblogs.com/penghuwan/p/7194133.html#_label1_0)

watch和computed都是以函数为基础的,但各自却都不同:

watch和computed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个数据(称它为依赖数据)发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,也就是自动调用相关的函数去实现数据的变动。

computed是计算属性,事实上和和data对象里的数据属性是同一类的(使用上),

例如:

computed:{
    fullName: function () { return  this.firstName + lastName }
}

取用的时候,用this.fullName去取用,就和取data一样(不要当成函数调用!)

watch:类似于监听机制+事件机制:

例如:

watch: {
   firstName: function (val) {  this.fullName = val + this.lastName }
}

firstName的改变是这个特殊“事件”被触发的条件,而firstName对应的函数就相当于监听到事件发生后执行的方法

watch和computed也有明显不同的地方:各自处理的数据关系场景不同

1.watch擅长处理的场景:一个数据影响多个数据
在这里插入图片描述
比如:

在watch中,一旦haiZeiTuan_Name(海贼团名称)发生改变
data选项中的船员名称全部会自动改变 (suoLong,naMei,xiangJiShi)

var vm = new Vue({
  el: '#app',
  data: {
    haiZeiTuan_Name: '草帽海贼团',
    suoLong: '草帽海贼团索隆',
    naMei: '草帽海贼团娜美',
    xiangJiShi: '草帽海贼团香吉士'
  },
  watch: {
    haiZeiTuan_Name: function (newName) {
      this.suoLong = newName + '索隆'
      this.naMei = newName + '娜美'
      this.xiangJiShi = newName + '香吉士'
      console.log(this.suoLong)
      console.log(this.naMei)
      console.log(this.xiangJiShi)
    }
  }
})
 
// 更改watch选项中监控的主数据
vm.haiZeiTuan_Name = '橡胶海贼团'

在这里插入图片描述

2.computed擅长处理的场景:一个数据受多个数据影响

在这里插入图片描述
computed监控的数据:lufei_Name
两者关系: lufei_Name = firstName + secName + thirdName
所以等式右边三个数据任一改变,都会直接修改 lufei_Name

var vm = new Vue({
  el: '#app',
  data: {
    // 路飞的全名:蒙奇·D·路飞
    firstName: '蒙奇',
    secName: 'D',
    thirdName: '路飞'
  },
  computed: {
    luFei_Name: function () {
      return this.firstName + this.secName + this.thirdName
    }
  }
})
 
// 将“路飞”改为“海军王”
vm.thirdName = '海军王'
// 打印路飞的全名
console.log(vm.luFei_Name)

在这里插入图片描述


版权声明:本文为weixin_53037175原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。