十四天学会Vue——Vue核心中篇(理论+实战)(第二天)

声明:是接着上篇讲的哦,感兴趣可以去看一看~

  这里一些代码就不写了,为了缩减代码量,大家知道就可以了:  Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

热身小tips,可以安装这个插件,这样写代码有提示哦~
在这里插入图片描述

一、Vue核心(中篇)

1.9 监视属性(侦听属性)

使用计算属性确定天气案例

<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<h2>今天天气很{
   
   {
   
   info}}</h2>
			<!-- 绑定事件的时候:@xxx="yyy" yyy可以写一些简单的语句 -->
			<!-- <button @click="isHot = !isHot">切换天气</button> -->
			<button @click="changeWeather">切换天气</button>
		</div>
	</body>
	<script type="text/javascript">	
		const vm = new Vue({
   
   
			el:'#root',
			data:{
   
   
				isHot:true,
			},
			computed:{
   
   
				info(){
   
   
					return this.isHot ? '炎热' : '凉爽'
				}
			},
			methods: {
   
   
				changeWeather(){
   
   
					this.isHot = !this.isHot
				}
			},
		})
	</script>  

所有vue写成的函数都要写成普通函数,不要使用箭头函数,因为箭头函数牵涉到没有this的问题

监视属性watch:

		<!-- 准备好一个容器-->
		<div id="root">
			<h2>今天天气很{
   
   {
   
   info}}</h2>
			<button @click="changeWeather">切换天气</button>
		</div>
	</body>

	<script type="text/javascript">	
		const vm = new Vue({
   
   
			el:'#root',
			data:{
   
   
2.监视的属性必须存在,才能进行监视!!

				isHot:true,
			},
			computed:{
   
   
				info(){
   
   
					return this.isHot ? '炎热' : '凉爽'
				}
			},
			methods: {
   
   
				changeWeather(){
   
   
1.当被监视的属性变化时, 回调函数自动调用, 进行相关操作

					this.isHot = !this.isHot
				}
			},
3.监视的两种写法:
							(1).new Vue时传入watch配置
							(2).通过vm.$watch监视
			/* watch:{
				isHot:{
					immediate:true, //初始化时让handler调用一下
					//handler什么时候调用?当isHot发生改变时。
					handler(newValue,oldValue){
						console.log('isHot被修改了',newValue,oldValue)
					}
				}
			} */
		})

		vm.$watch('isHot',{
   
   
			immediate:true, //初始化时让handler调用一下
			//handler什么时候调用?当isHot发生改变时。
			handler(newValue,oldValue){
   
   
				console.log('isHot被修改了',newValue,oldValue)
			}
		})
	</script>

深度监视

	<!-- 
				深度监视:
						(1).Vue中的watch默认不监测对象内部值的改变(一层)。
						(2).配置deep:true可以监测对象内部值改变(多层)。
				备注:
						(1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
						(2).使用watch时根据数据的具体结构,决定是否采用深度监视。
		 -->
		<!-- 准备好一个容器-->
		<div id="root">
			<h2>今天天气很{
   
   {
   
   info}}</h2>
			<button @click="changeWeather">切换天气</button>
			<hr/>
			<h3>a的值是:{
   
   {
   
   numbers.a}}</h3>
			<button @click="numbers.a++">点我让a+1</button>
			<h3>b的值是:{
   
   {
   
   numbers.b}}</h3>
			<button @click="numbers.b++">点我让b+1</button>
			<button @click="numbers = {a:666,b:888}">彻底替换掉numbers</button>
			{
   
   {
   
   numbers.c.d.e}}
		</div>
	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		const vm = new Vue({
   
   
			el:'#root',
			data:{
   
   
				isHot:true,
				numbers:{
   
   
					a:1,
					b:1,
					c:{
   
   
						d:{
   
   
							e:100
						}
					}
				}
			},
			computed:{
   
   
				info(){
   
   
					return this.isHot ? '炎热' : '凉爽'
				}
			},
			methods: {
   
   
				changeWeather(){
   
   
					this.isHot = !this.isHot
				}
			},
			watch:{
   
   
				isHot:{
   
   
					// immediate:true, //初始化时让handler调用一下
					//handler什么时候调用?当isHot发生改变时。
					handler(newValue,oldValue){
   
   
						console.log('isHot被修改了',newValue,oldValue)
					}
				},
				//监视多级结构中某个属性的变化
				/* 'numbers.a':{
					handler(){
						console.log('a被改变了')
					}
				} */
				//监视多级结构中所有属性的变化
				numbers:{
   
   
					deep:true,
					handler(){
   
   
						console.log('numbers改变了')
					}
				}
			}
		})
	</script>

监视属性的简写

 <div id="root">
        <h2>今天天气很{
   
   {
   
   info}}</h2>
        <button @click="changeweather">切换天气</button>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
        const vm = new Vue({
   
   
            el: '#root',
            data: {
   
   
                //布尔值  可以直接被识别出来?
                isHot: true
            },
            computed: {
   
   
                info () {
   
   
                    return this.isHot ? '炎热' : '凉爽'
                }
            }, methods: {
   
   
                changeweather () {
   
   
                    this.isHot = !this.isHot
                }
            },
            watch: {
   
   
                // isHot: {  //对象
                //     // immediate: true,
                //     // deep: true,  //深度监视
                //     handler (newValue, oldValue) {
   
   
                //         console.log('info被修改了', newValue, oldValue)
                //     }
                // }
                // 只有handler配置项可以简写  ()就代表handler函数
                isHot (newValue, oldValue) {
   
   
                    console.log('info被修改了', newValue, oldValue)
                }
            }
        })
        // vm.$watch('isHot', {
   
   
        //     handler (newValue, oldValue) {
   
   
        //         console.log('info被修改了', newValue, oldValue)
        //     }
        // })
        vm.$watch('isHot', function (newValue, oldValue) {
   
   
            console.log('isHot被修改了', newValue, oldValue)
        })
        //简写
		/* vm.$watch('isHot',(newValue,oldValue)=>{
			console.log('isHot被修改了',newValue,oldValue,this)
		}) */

    </script>

天气案例中计算属性和侦听属性区分:

<!-- 准备好一个容器-->
		<div id="root">
			姓:<input type="text" v-model="firstName"> <br/><br/>
			名:<input type="text" v-model="lastName"> <br/><br/>
			全名:<span>{
   
   {
   
   fullName}}</span> <br/><br/>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		const vm = new Vue({
   
   
			el:'#root',
			data:{
   
   
				firstName:'张',
				lastName:'三',
				fullName:'张-三'
			},
			watch:{
   
   
				firstName(val){
   
   
					setTimeout(()=>{
   
   
						console.log(this)
						this.fullName = val + '-' + this.lastName
					},1000);
				},
				lastName(val){
   
   
					this.fullName = this.firstName + '-' + val
				}
			}
		})
	</script>

1.10 绑定样式

 <style>
        .basic {
   
   
            width: 400px;
            height: 100px;
            border: 1px solid black;
        }

        .happy {
   
   
            border: 4px solid red;
            ;
            background-color: rgba(255, 255, 0, 0.644);
            background: linear-gradient(30deg, yellow, pink, orange, yellow);
        }

        .sad {
   
   
            border: 4px dashed rgb(2, 197, 2);
            background-color: gray;
        }

        .normal {
   
   
            background-color: skyblue;
        }

        .atguigu1 {
   
   
            background-color: yellowgreen;
        }

        .atguigu2 {
   
   
            font-size: 30px;
            text-shadow: 2px 2px 10px red;
        }

        .atguigu3 {
   
   
            border-radius: 20px;
        }
    </style>
    <script type="text/javascript" src="../../js/vue.js"></script>
</head>

<body>
  <!-- 
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值