Vue基础 之 米和千米的相互转换 watch监听方法

<!DOCTYPE html>
<HTML>
    <head>
        <meta charset="utf">
        <title>米和千米的互换watch监听</title>
    </head>
    <body>
        <!-- 父组件模板 -->
        <div id="app">
           <cpn :numberkm="num1km" :numberm="num2m"
           @num1change = "number1change($event)"
           @num2change = "number2change($event)"
           
           ></cpn>
        </div>
        <!-- 子组件模板 -->
        <template id="cpn">
            <div>
                <!-- <p>千米prop:{{numberkm}}</p> -->
                <!-- <p>千米data:{{dnumberkm}}</p> -->
                <p>千米:<input type="text" v-model="dnumberkm">km</p>
                <!-- <p>米prop:{{numberm}}</p> -->
                <!-- <p>米data:{{dnumberm}}</p> -->
                <p>米:<input type="text" v-model="dnumberm">m</p>
            </div>
        </template>
        <script src="../vue.js"></script>
        <script>
            //父组件
            var app = new Vue({
               el:'#app',
               data:{
                   num1km: 1,
                   num2m: 1000, 
                   
               },
               methods:{
                   number1change(val){
                       this.num2 = parseFloat(val);
                   },
                   number2change(val){
                       this.num1 = parseFloat(val);
                   } 
               },
               //子组件
               components:{
                   cpn:{
                        template:'#cpn',
                        data(){
                            return{
                                dnumberkm: this.numberkm,
                                dnumberm: this.numberm,
                            }
                        },
                        props:{
                            numberkm: {
                                
                                default:1,
                            },
                            numberm: {
                                
                                default:1000,
                            }
                        },
                        watch:{
                            dnumberkm(newValue){
                                this.dnumberm = newValue * 1000;
                                this.$emit('num1change', newValue);    
                            },
                            dnumberm(newValue){
                                this.dnumberkm = newValue /1000;
                                this.$emit('num2change', newValue);    
                            },
                        },
                    },
                        
                },
            })
        </script>
    </body>
</HTML>

使用watch 监听 从父组件prop接收的、在子组件上被双向绑定的  data 。

将 watch 监听的(已改变的新的)数据通过自定义事件$emit(发射)给父组件。

父组件 @ 到自定义事件的发生,执行相应函数,从而改变父组件中的初始data。

父组件的初始 data 通过 prop 将值传给子组件。

表现为:子组件的千米发生变化,watch 到变化后(input输入新的值)的千米,将千米X1000后,发射给父组件,父组件监听该发射,接收千米X1000后的数据,并将该数据赋值给父组件的原始的存放米的data, 由于父组件的 米 发生了改变,prop 使 子组件的 米 也发生了改变。——子组件的千米发生改变,最后子组件的米也发生了改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值