• 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
                    }
                }
            })
    
  • 相关阅读:
    Oracle之配置节点间相互信任机制测试
    记crt 在windows与linux服务器之间利用ftp进行文件的上传下载
    虚拟机防火墙的相关设置
    Linux下载安装mysql5.7教程
    linux下使用Oracle常用命令
    Linux的常用命令
    ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/19.2.0/db_1/dbs/initsanshi.ora'报错
    Linux下创建Oracle19C的数据库实例
    redhat7.6Linux安装Oracle19C完整版教程
    Python模拟登录的几种方法
  • 原文地址:https://www.cnblogs.com/li33/p/13503345.html
Copyright © 2020-2023  润新知