zoukankan      html  css  js  c++  java
  • Vue组件:子组件传值父组件的解析

    子组件传值给父组件的理解

    <!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" type="text/javascript" charset="utf-8"></script>
    </head>
    
    <body>
        <!-- 在一个列表中,让每一个li都可以决定父组件中的数值 -->
        <div id="app">
            <ul>
                <school v-for="item,index in schoolList" :index="index" :school-name="item" @cschool="change"></school>
            </ul>
            <h2>选择的学校是:{{chooseSchool}}</h2>
        </div>
    
        <script type="text/javascript">
            Vue.component("school", {
                props: ['schoolName', 'index'],
                template: `<li>						
    							<h3>{{index}}-学校名称:{{schoolName}}</h3>
    							<button @click="chooseEvent(schoolName)">选择学校</button>	
    						</li>`,
                methods: {
                    chooseEvent: function (schoolName) {
                        this.$emit('cschool', schoolName)
                    }
    
                }
    
            })
            //根组件
            let app = new Vue({
                el: "#app",
                data: {
                    schoolList: ['清华', '北大', '浙大', "中大"],
                    chooseSchool: ""
                },
                methods: {
                    change: function (data) {
                        this.chooseSchool = data
                    }
                }
            })
        </script>
    </body>
    </html>
    

    思想

    1. 我们需要一个模板,这个摸板可以布局任意多的li

      <school></school>
      
    2. 所以需要一个摸板,这里点击希望能把子组件的值传到父组件data

      template: `<li>						
      	<h3>{{index}}-学校名称:{{schoolName}}</h3>
      	<button @click="chooseEvent(schoolName)">选择学校</button>	
      </li>`,
      

    3.但是摸板中用到了chooseEvent()方法,所以需要再摸板中定义methods

    Vue.component("school", {
                template: 
                methods: {
                    chooseEvent: function (schoolName) {
                        this.$emit('cschool', schoolName)
                    }
                }      })
    

    4.methods方法定义事件类型名称cschool,以及默认的参数

    5.此时希望school显示出数据,所以用v-for遍历vue对象的data元素

    <school v-for="item,index in schoolList"></school>
    

    6.但是摸板类是需要索引和获取学校名称的

    <h3>{{index}}-学校名称:{{schoolName}}</h3>
    
    <school v-for="item,index in schoolList" :index="index" :school-name="item" ></school>
    

    所以我们将index绑定一个index属性(自定义),将item绑定到schoolName等价于school-name.

    7.上面以及可以显示出效果,但是没办法点击选择学校,所以我们用到组件中定义的事件类型cschool

    <school v-for="item,index in schoolList" :index="index" :school-name="item" @cschool="change"></school>
    

    并且对应vue对象的方法

    8.change方法对应的是修改vue对象的data数据,这里方法中的data是子组件methods传来的数据

    let app = new Vue({
                data: {
                    chooseSchool: ""
                },
                methods: {
                    change: function (data) {
                        this.chooseSchool = data
                    }
                }
            })
    
  • 相关阅读:
    第12章 Swing编程
    第11章 AWT编程
    第10章 异常处理
    第9章 泛型
    Java 实例
    Spring 框架 (持续完善中)
    Java 程序员必备的5个框架 (持续完善中)
    IDEA 中建立Java项目步骤
    Java 实例
    Java 实例
  • 原文地址:https://www.cnblogs.com/li33/p/13503345.html
Copyright © 2011-2022 走看看