自定义组件与组件复用

简介

        当一个项目出现大量相似的模块时毫无疑问组件化是最合理方便的做法,通过传参的不同渲染不同的组件,通过class类渲染不同的样式,通过vue的v-if v-else-if 甚至可以实现组件内标签的更改增加减少,这需要特殊操作,这里介绍了如何进行组件的复用和合理的定义组件,下面将以一个简单的例子来介绍

一个随意定义基于vant的自定义组件

  请配合代码下的文字读该代码

 <btn-liking
        class="btn-liking"
        :is_liked="is_liked"
        :art_id="thearticle.art_id || 0"
        @toLiking="is_liked = 1"
        @quitLiking="is_liked = -1"
        @toDisLiking="is_liked = 0"
      ></btn-liking>
<template>
  <van-button
    icon="good-job"
    type="default"
    v-if="is_liked === 1"
    :loading="isLoading"
    class="likeing"
    @click="quitlikeing"
  />
  <span v-else-if="is_liked === -1"
    ><van-button
      icon="good-job-o"
      type="default"
      :loading="isLoading"
      class="good-btn"
      @click="goLikeing"
    />
    <van-button
      icon="good-job-o"
      type="default"
      :loading="isLoading"
      class="notGood"
      @click="goDisLikeing"
    />
  </span>

  <van-button
    icon="good-job"
    type="default"
    v-else
    :loading="isLoading"
    class="notGood"
    @click="quitDislikeing"
  />
</template>



<style lang="less" scoped>
.likeing {
  .van-icon {
    color: #ffa000;
  }
}
.notGood {
  .van-icon {
    transform: rotate(180deg);
    color: rgb(255, 0, 0);
  }
}

.good-btn {
  margin-right: 10px !important;
}
</style>

由于太长了把script部分去除了只留下了template模板部分 渲染的页面图片:
  

 通过点击交互有三种形态,就像图片表达的一样

该组件对外修改样式的接口有:

1 该组件通过传递的参数:is_liked="is_liked"不同呈现出不同的形态,我们可以通过不同的传参进行控制组件的标签变化

2

<btn-liking
        class="btn-liking"
        :is_liked="is_liked"
        :art_id="thearticle.art_id || 0"
        @toLiking="is_liked = 1"
        @quitLiking="is_liked = -1"
        @toDisLiking="is_liked = 0"
      ></btn-liking>

在这里加了一个btn-liking的样式 

 

        在三种不同形态下的 此组件发现在浏览器渲染出来是都包括的这个类名,毫无疑问在这个组件内是可以通过这个类名改变其样式的,以此得出结果:想要方便的通过class类名改变该组件的样式其内部的标签就不能单独裸露,合理的设计必须加上一个父元素,以保障当父组件使用不同样式复用该组件时不会出现变量污染,和样式混乱。

3 自定义一个参数进行控制组件

        父组件自己传入一个参数告知组件是我在使用你,参数类型建议是Boolean型简单方便,子组件接受是默认该参数是false值,只有我用时才渲染与其他不同的页面,这里的自由度就很高了需要小心使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heigl swift

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值