• emit的用法


    emit: 子组件向父组件传值

    JS用法

    vm.$emit( eventName, […args] )
    参数:

    • {string} eventName
    • [...args]
      触发当前实例上的事件。附加参数都会传给监听器回调。
    <template>
      <div>
        <div>$emit子组件调用父组件的方法并传递数据</div>
        <h1>父组件数据:{{msg}}</h1>
        <emit-ch @updateInfo="updateInfo" :sendData="msg"></emit-ch>
      </div>
    </template>
    <script>
    import emitCh from './$emitCh'
    export default {
      name: 'emitFa',
      components: { emitCh },
      data () {
        return {
          msg: '北京'
        }
      },
      methods: {
        updateInfo (data) { // 点击子组件按钮时触发事件
          console.log(data)
          this.msg = data.city // 改变了父组件的值
        }
      }
    }
    </script>
    
    <!-- ==================================================== -->
    <template>
     <div class="train-city">
        <h3>父组件传给子组件的数据:{{sendData}}</h3>
        <br/><button @click='select()'>点击子组件</button>
      </div>
    
    </template>
    
    <script>
    export default {
      name: 'emitCh', // 相当于一个全局 ID,可以不写,写了可以提供更好的调试信息
      props: ['sendData'], // 用来接收父组件传给子组件的数据
      data () {
        return {
        }
      },
      computed: {
      },
      methods: {
        select () {
          let data = {
            city: '杭州'
          }
          this.$emit('updateInfo', data)// select事件触发后,自动触发updateInfo事件
        }
      }
    }
    </script>
    

    TS用法

    @Emit

    <template>
        <div class="container">
            <!-- value需要子组件@Prop定义,这里把驼峰化横线 -->
            <child-com :parent-value="msg"></child-com>
            <!-- 方法一: 驼峰转横线 -->
            <child-com @handle-to-parent1="handleChildValue"></child-com>
            <!-- 方法二: 驼峰转横线. 注意,这里是用test接收的 -->
            <child-com @test="handleChildValue"></child-com>
            <!-- 方法三: 驼峰转横线 -->
            <child-com @handle-to-parent3="handleChildValue"></child-com>
        </div>
    </template>
     
    <script lang="ts">
    import { Component, Vue } from "vue-property-decorator";
    import childCom from "路径";
     
    @Component({
        components: {
            childCom    // 声明子组件
        }
    })
    export default class Parent extends Vue {
        private msg: string = "要传给子组件的值";
        
        private childValue: string = "";
     
        // 处理子组件传过来的值 val:是自定义的
        private handleChildValue(val: string) {
            // val: 子组件传过来的值
            this.childValue = val;
        }
    }
    </script>
    
    <!-- ============================================== -->
    <template>
        <div class="container">
            <!-- 方法一: 直接调用@Emit -->
            <button @click="handleToParent1">向父组件传值</button>
            <!-- 方法二: 直接调用@Emit -->
            <button @click="handleToParent2">向父组件传值</button>
            <!-- 方法三: 间接调用 -->
            <button @click="handleClickEvent">向父组件传值</button>
        </div>
    </template>
     
    <script lang="ts">
    // 引入Emit
    import { Component, Vue, Emit } from "vue-property-decorator";
     
    @Component
    export default class Child extends Vue {
        // 子组件向父组件传的值
        private msg: string = "要传递给父组件的值";
     
     
        // 方法一
        @Emit()    
        private handleToParent1() {
            return this.msg;    // return将要传递的值
        }
     
        // 方法二: 注意,这时父组件接收值时是用@Emit("test")括号中的test接收的,test会把正面的方法名字覆盖。(test)是自定义的
        @Emit("test")    
        private handleToParent2() {
            return this.msg;    // return将要传递的值
        }
     
        // 方法三
        // 先定义父组件接收的方法(同方法一、二)
        @Emit() 
        private handleToParent3() {
            return this.msg;    // return将要传递的值
        }
        private handleClickEvent() {
            // ... 一些其它的操作
            // 然后手动调用传值
            this.handleToParent3();
        }
    }
    </script>
    
    
    谁不是孤身一人,翻山越岭
  • 相关阅读:
    栈(代码分解)
    线性表(代码分解)
    绪论简概
    1006 Sign In and Sign Out (25 分)
    1005 Spell It Right (20 分)
    分支界限法解决0/1背包问题
    Sequence( 分块+矩阵快速幂 )
    Shape Number (最小表示法)
    Age of Moyu (2018 Multi-University Training Contest 7)
    [Cqoi2014]危桥 (两遍网络流)
  • 原文地址:https://www.cnblogs.com/hasz/p/14342521.html
Copyright © 2020-2023  润新知