zoukankan      html  css  js  c++  java
  • Vue父子之间的值传递

    将通过两个input框实现父子之间的值传递作为演示,效果图

    先注册父子各一个组件,代码如下

     

     <div id="app">
            <parent></parent>
        </div>
    
        <template id="parent">
            <div>
                <input type="text" v-model="text" placeholder="parent">
                <son></son>
            </div>
        </template>
        <template id="son">
            <div>
                <input type="text" placeholder="son">
            </div>
        </template>
     new Vue({
            el: "#app",
            components: {
                parent: {
                    template: '#parent',
                    data() {
                        return {
                            text: ''
                        }
                    },
                    components: {
                        son: {
                            template: '#son'
                        }
                    }
                }
            }
        })

     一、父传子

    再父组件通过属性传递值

     <template id="parent">
            <div>
                <input type="text" v-model="text" placeholder="parent">
                <son :text="text"></son>//通过属性值传递
            </div>
        </template>

    子组件通过props属性接受

     components: {
                        son: {
                            template: '#son',
                            props:['text'] //通过props属性接受父传递过来的值
                        }
                    }

    这样我们就可以使用父组件传递过来的值了

     <template id="son">
            <div>
                <input type="text" placeholder="son" :value="text">//使用父元素传递过来的值
            </div>
        </template>

    看下现在的效果

    父组件向子组件传递成功

    二、子传父

    通过父组件自定义事件,然后子组件用$emit(event,aguments)调用

     <template id="parent">
            <div>
                <input type="text" v-model="text" placeholder="parent">
                <son :text="text" @ev="item"></son>//自定义事件
            </div>
        </template>
    
    
    components: {
                parent: {
                    template: '#parent',
                    data() {
                        return {
                            text: ''
                        }
                    },
                    components: {
                        son: {
                            template: '#son',
                            props: ['text']
                        }
                    },
                    methods: {
                        item(v) { //自定义事件触发的方法
                            this.text = v //使用子组件传递过来的值改变this.text数据
                        }
                    }
                }
            }

    再子组件触发自定义事件

    <template id="son">
            <div>
                <input type="text" placeholder="son" :value="text" @input="emit" ref="son">//触发自定义事件
            </div>
        </template>
    
    
    
    components: {
                parent: {
                    template: '#parent',
                    data() {
                        return {
                            text: ''
                        }
                    },
                    components: {
                        son: {
                            template: '#son',
                            props: ['text'], 
                            methods: {
                                emit() {
                                    this.$emit('ev', this.$refs.son.value) //触发自定义事件,并传递值
                                }
                            }
                        }
                    },
                    methods: {
                        item(v) {
                            this.text = v
                        }
                    }
                }
            }

    这样就完成了子传父,父传子,效果也完成了

  • 相关阅读:
    Element-ui组件--pagination分页
    vue数据请求
    CSS设置背景透明字体不透明
    Sublime Text3的快捷键和插件
    Sublime Text 3 安装Package Control
    想学习一下node.js,重新安装配置了node
    js 上传图片
    js 前端不调接口直接下载图片
    js 获取当前URL信息
    js 常用的正则表达式
  • 原文地址:https://www.cnblogs.com/zlf1914/p/13221367.html
Copyright © 2011-2022 走看看