• vue 自定义组件事件


    <template>
        <div class="app">
            <h1>{{msg}},学生姓名是:{{studentName}}</h1>
    
            <!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 -->
            <School :getSchoolName="getSchoolName"/>
    
            <!-- 通过父组件给子组件绑定一个自定义事件实现:子给父传递数据(第一种写法,使用@或v-on) -->
            <!-- <Student @atguigu="getStudentName" @demo="m1"/> -->
    
            <!-- 通过父组件给子组件绑定一个自定义事件实现:子给父传递数据(第二种写法,使用ref) -->
            <Student ref="student" @click.native="show"/>
        </div>
    </template>
    
    <script>
        import Student from './components/Student'
        import School from './components/School'
    
        export default {
            name:'App',
            components:{School,Student},
            data() {
                return {
                    msg:'你好啊!',
                    studentName:''
                }
            },
            methods: {
                getSchoolName(name){
                    console.log('App收到了学校名:',name)
                },
                getStudentName(name,...params){
                    console.log('App收到了学生名:',name,params)
                    this.studentName = name
                },
                m1(){
                    console.log('demo事件被触发了!')
                },
                show(){
                    alert(123)
                }
            },
            mounted() {
                this.$refs.student.$on('atguigu',this.getStudentName) //绑定自定义事件
                // this.$refs.student.$once('atguigu',this.getStudentName) //绑定自定义事件(一次性)
            },
        }
    </script>
    
    <style scoped>
        .app{
            background-color: gray;
            padding: 5px;
        }
    </style>
    <template>
        <div class="student">
            <h2>学生姓名:{{name}}</h2>
            <h2>学生性别:{{sex}}</h2>
            <h2>当前求和为:{{number}}</h2>
            <button @click="add">点我number++</button>
            <button @click="sendStudentlName">把学生名给App</button>
            <button @click="unbind">解绑atguigu事件</button>
            <button @click="death">销毁当前Student组件的实例(vc)</button>
        </div>
    </template>
    
    <script>
        export default {
            name:'Student',
            data() {
                return {
                    name:'张三',
                    sex:'',
                    number:0
                }
            },
            methods: {
                add(){
                    console.log('add回调被调用了')
                    this.number++
                },
                sendStudentlName(){
                    //触发Student组件实例身上的atguigu事件
                    this.$emit('atguigu',this.name,666,888,900)
                    // this.$emit('demo')
                    // this.$emit('click')
                },
                unbind(){
                    this.$off('atguigu') //解绑一个自定义事件
                    // this.$off(['atguigu','demo']) //解绑多个自定义事件
                    // this.$off() //解绑所有的自定义事件
                },
                death(){
                    this.$destroy() //销毁了当前Student组件的实例,销毁后所有Student实例的自定义事件全都不奏效。
                }
            },
        }
    </script>
    
    <style lang="less" scoped>
        .student{
            background-color: pink;
            padding: 5px;
            margin-top: 30px;
        }
    </style>
  • 相关阅读:
    C++小知识之Vector用法
    云计算和大数据入门
    C++解析JSON之JsonCPP
    OSS研究
    linux内核--进程地址空间(三)
    学习笔记:修改网吧计费系统
    学习笔记:找回电脑开机密码
    例说C#深拷贝与浅拷贝
    JBossESB教程(一)——开发环境的搭建
    Java集合---ConcurrentHashMap原理分析
  • 原文地址:https://www.cnblogs.com/ganxiang/p/15835932.html
Copyright © 2020-2023  润新知