美文网首页
vue组件基本案例

vue组件基本案例

作者: 2019吖 | 来源:发表于2018-07-27 18:58 被阅读0次

    工作中要做一个弹出分享到各平台和收藏(取消收藏)文章的模块,因为在多个组件中需要,所以将这一部分做成一个独立的组件。

    效果如下图:

    1、创建组件文件

    我创建了一个component文件夹,用来放多次被使用的组件文件,其中shareBox.vue为此次的分享组件。

    该组件在项目中被使用在activityDetail.vue和informationDetail.vue等多个页面中。

    目录结构

    2、父子组件

    父组件为activityDetail.vue和informationDetail.vue等调用shareBox.vue的组件

    子组件为shareBox.vue被调用的组件

    3、父组件调用子组件

    第一步:在script块内根据自己的路径正确将子组件引入

    import shareBox from '../component/shareBox.vue';

    第二步:组件注册

    components: {

          shareBox

    },

    第三步:组件调用

    <shareBox

         v-bind:content="content"

         v-bind:flag="flag"

         v-bind:collectionStatus="content.collectionStatus" 

         @closeShare="bgHide"

         @collection="collection"

         @reCollection="messageBoxCofirm">

    可以看到向子组件传递了3个值、定义了3个事件。

    4、父组件向子组件传值,子组件接收和使用值

    content:父组件传的对象,包含分享,收藏时所需文章id等文章相关信息

    flag:标识,用来分别父组件,不同父组件需显示不同内容时使用,比如activityDetail.vue不需要收藏,而informationDetail.vue需要收藏

    content.collectionStatus :收藏状态变量

    子组件使用prop接收值

    props: ['content','flag','collectionStatus']

    5、子组件调用父组件方法

    点击取消按钮关闭分享模块,调用父组件因此该子组件的方法,使用$emit触发父组件方法

    子组件调用:

    back:function () { this.$emit('closeShare')}

    父组件捕捉:

    closeShare方法

    bgHide为父组件内的一个隐藏子组件shareBox的方法

    6、收藏 / 取消收藏

    收藏 / 取消收藏需要改变父组件传递过来的收藏状态collectionStatus

    由于vue中数据传递是父向子 prop 之间形成了一个单向下行绑定,父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

    所以不能直接改变父组件传递过来的collectionStatus,因此需要将该值复制出一个副本myCollect

    data: function () {

           return { myCollect: this.collectionStatus };

    },

    当改变状态时,改变副本myCollect状态

    //收藏(改变收藏状态、调用父组件收藏方法)

    collection:function () {

           this.myCollect = !this.myCollect;

           this.$emit('collection')

    },

    //取消收藏(改变收藏状态、调用父组件取消收藏方法)

    reCollection:function () {

           this.myCollect = !this.myCollect;

           this.$emit('reCollection')

    },

    相关文章

      网友评论

          本文标题:vue组件基本案例

          本文链接:https://www.haomeiwen.com/subject/vaovmftx.html