最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端笔记(Vue使用——组件)

    正文概述 掘金(爱吃薯条的Ray)   2021-03-24   539

    题目

    描述Vue组件生命周期(有父子组件的情况)

    Vue组件如何通讯

    描述组件渲染和更新的过程

    知识点

    props 和 $emit

    • props接收父组件向子组件传递的信息(父组件通过v-bind向子组件传值)
    • vm.$emit触发一个事件,用于在父子组件以及组件之间传值

    组件间通讯 - 自定义事件

    vm.$on( event, callback )

    • 监听当前实例上的自定义事件。事件可以由 vm.$emit 触发。回调函数会接收所有传入事件触发函数的额外参数。

    vm.$off( [event, callback] )

    • 移除自定义事件监听器。
    • 如果没有提供参数,则移除所有的事件监听器;
    • 如果只提供了事件,则移除该事件所有的监听器;
    • 如果同时提供了事件与回调,则只移除这个回调的监听器。
    //index.vue
    <template>
        <div>
            <Input @add="addHandler"/>
            <List :list="list" @delete="deleteHandler"/>
        </div>
    </template>
    
    <script>
    import Input from './Input'
    import List from './List'
    
    export default {
        components: {
            Input,
            List
        },
        data() {
            return {
                list: []
            }
        },
        methods: {
            addHandler(title) {
                this.list.push({
                    id: `id-${Date.now()}`,
                    title
                })
            },
            deleteHandler(id) {
                this.list = this.list.filter(item => item.id !== id)
            }
        }
    }
    </script>
    
    // input.vue
    <template>
        <div>
            <input type="text" v-model="title"/>
            <button @click="addTitle">add</button>
        </div>
    </template>
    
    <script>
    import event from './event' //调用event.vue 用于组件间传值
    
    export default {
        data() {
            return {
                title: ''
            }
        },
        methods: {
            addTitle() {
                // 调用父组件的事件 
                this.$emit('add', this.title)
    
                // 调用自定义事件 组件间传值 触发事件
                event.$emit('onAddTitle', this.title)
    
                this.title = ''
            }
        }
    }
    </script>
    
    //List.vue
    <template>
        <div>
            <ul>
                <li v-for="item in list" :key="item.id">
                    {{item.title}}
                    <button @click="deleteItem(item.id)">删除</button>
                </li>
            </ul>
        </div>
    </template>
    
    <script>
    import event from './event'
    
    export default {
        // props: ['list']
        props: {
            // prop 类型和默认值
            list: {
                type: Array,
                default() {
                    return []
                }
            }
        },
        data() {
            return {
    
            }
        },
        methods: {
            deleteItem(id) {
                this.$emit('delete', id)
            },
            addTitleHandler(title) {
                // eslint-disable-next-line
                console.log('on add title', title)
            }
        },
        mounted() {
            // eslint-disable-next-line
            console.log('list mounted')
    
            // 绑定自定义事件 接收事件
            event.$on('onAddTitle', this.addTitleHandler)
        },
        beforeDestroy() {
            // 及时销毁,否则可能造成内存泄露
            event.$off('onAddTitle', this.addTitleHandler)
        }
    }
    </script>
    
    //event 用于组件间传值
    import Vue from 'vue'
    
    export default new Vue()
    
    

    组件生命周期

    组件生命周期(单个组件)

    beforcreate create beforeMount mounted beforeupdate updated beforedestroy destroy 前端笔记(Vue使用——组件)

    前端笔记(Vue使用——组件)

    生命周期(父子组件)

    创建:

    • 先初始化父组件,然后初始化子组件,然后载入子组件完成,然后载入父组件完成

    销毁:

    • 先启动销毁父组件,然后启动销毁子组件,然后销毁子组件完成,然后销毁父组件完成

    起源地下载网 » 前端笔记(Vue使用——组件)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元