美文网首页日常学习vue
父子通信典型案例

父子通信典型案例

作者: Blank_刘 | 来源:发表于2021-03-16 17:47 被阅读0次
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="/js/vue.js"></script>
</head>

<body>
    <h3>需求: 1、data数据和props数据都要和输入框双向绑定 2、第一个输入框是第二个的100倍 3、第二个输入框是第一个1/100</h3>
    <div id="app">
        <child :pnum1='num1' :pnum2='num2' @num1change='num1change' @num2change='num2change'></child>
    </div>
    <template id="temp">
        <div>
            <h2>dnum1:{{dnum1}}</h2>
            <h2>pnum1:{{pnum1}}</h2>
            <!-- <input type="text" v-model="dnum1"> -->
            <!-- v-model='dnum1' 等价于 :value='dnum1' @input='$event.target.value' -->
            <input type="text" :value='dnum1' @input='num1Input'>
            <h2>dnum2:{{dnum2}}</h2>
            <h2>pnum2:{{pnum2}}</h2>
            <!-- <input type="text" v-model='dnum2' > -->
            <input type="text" :value='dnum2' @input='num2Input'>

        </div>
    </template>
    <script>
        new Vue({
            el: '#app',
            data: {
                num1: 0,
                num2: 1
            },
            methods: {
                num1change(value) {
                    // 需要转为数字类型
                    this.num1 = parseFloat(value)
                },
                num2change(value) {
                    this.num2 = parseFloat(value)
                }
            },
            components: {
                child: {
                    template: '#temp',
                    props: {
                        // 定义类型
                        pnum1: Number,
                        pnum2: Number
                    },
                    data() {
                        return {
                            dnum1: this.pnum1,
                            dnum2: this.pnum2
                        }
                    },
                    methods: {
                        num1Input(event) {
                            // 1、将input中的value赋值到dnum1
                            this.dnum1 = event.target.value
                                // 2、为了让父组件可以修改值,发出一个事件
                            this.$emit('num1change', this.dnum1)
                                // 3、同时修改dnum2的值
                            this.dnum2 = this.dnum1 * 100
                            this.$emit('num2change', this.dnum2)
                        },
                        num2Input(event) {
                            this.dnum2 = event.target.value
                            this.$emit('num2change', this.dnum2)
                            this.dnum1 = this.dnum2 / 100
                            this.$emit('num1change', this.dnum1)
                        }
                    }

                }
            }

        })
    </script>
</body>

</html>

相关文章

网友评论

    本文标题:父子通信典型案例

    本文链接:https://www.haomeiwen.com/subject/puwdcltx.html