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
                    }
                }
            })
    
  • 相关阅读:
    深入Android 【一】 —— 序及开篇
    Android中ContentProvider和ContentResolver使用入门
    深入Android 【六】 —— 界面构造
    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the ser
    Dynamic Business代码片段总结
    对文件的BuildAction以content,resource两种方式的读取
    paraview 3.12.0 windows下编译成功 小记
    百度网盘PanDownload使用Aria2满速下载
    netdata的安装与使用
    用PS给证件照排版教程
  • 原文地址:https://www.cnblogs.com/li33/p/13503345.html
Copyright © 2011-2022 走看看