小程序开发(二)---自定义组件,组件引用外部样式及插槽(slot)
发表时间:2020-9-24
发布人:葵宇科技
浏览次数:102
自定义组件
在小程序的components(组件)文件夹下新建一个文件夹,当然命名根据组件的功能,类型…来定义是最好的。
 
 这里选择新建的component,直接输入你要创建的组件名称就可以,不需要后缀,创建完成后会自动生成相关文件的。
 在.wxml文件中布局你要创建的组件
 
<view class="modal" hidden="{{!modalShow}}">
  <view class="panel">
    <i class="iconfont icon-quxiao" bind:tap="onClose"></i>
    <!-- slot插槽 -->
    <slot name="modal_content"></slot>
  </view>
</view>
在.wxss文件中写入组件所要用到的css样式
 
.modal{
  position: fixed;
  top:0;
  bottom: 0;
  left:0;
  right: 0;
  z-index: 999;
  text-align: center;
  background: rgba(0, 0, 0,0.6);
}
.panel{
  position: absolute;
  bottom: 0rpx;
  left: 0;
  width: 100%;
  min-height: 300rpx;
  box-sizing: border-box;
  background-color: #f8f8f8;
}
.modal .icon-quxiao{
  position: absolute;
  right: 10rpx;
  top:10rpx;
  padding-left: 20rpx;
}
在.js文件写组件的功能,及组件和页面交互所要传递参数等逻辑代码
 
如果你定义的这个属性有默认值的话,这样写就可以了
 properties: {
    modalShow:{
      type:Boolean,
      value:true
    }
  }
因为Boolean类型默认值为fals,所以上面代码中就简写了。
组件外部样式引用及插槽(slot)
  options:{
    styleIsolation:'apply-shared',
    multipleSlots:true
  },
在小程序开发中:默认情况下,自定义组件的样式只受到自定义组件 wxss 的影响。
 styleIsolation:‘apply-shared’:简单来说就是,组件内部的wxss样式不会影响到你调用这个组件的页面,而这个页面的样式会影响到组件。(每个页面都是是可以引用到全局app.wxss这个样式类的,所以只要claas名字一样就可以影响到组件了。)
 当然styleIsolation还有其他属性,详情查看小程序开发文档https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#%E7%BB%84%E4%BB%B6%E6%A0%B7%E5%BC%8F%E9%9A%94%E7%A6%BB
这里组件中用到了外部引入的iconfont图标,小程序如何引入iconfont图标请查看
https://blog.csdn.net/weixin_37624974/article/details/108770431
在小程序开发中:默认情况下,一个组件的 wxml 中只能有一个 slot 。需要使用多 slot 时,可以在组件 js 中声明启用.
 multipleSlots:true ( 启用多slot支持)
如果启用了多slot支持,组件不管定义了几个插槽 slot 都必须有name属性,如果不启用,就不要写name属性,不然slot插槽就不会生效
组件调用

 1,在.json文件中引入组件
 
 2,.wxml
 
<view>
    <w-modal-pop  modalShow="{{modalShow}}">
     <view slot="modal_content">
        <button size="default" class="lgin" open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">获取用户授权信息</button>
      </view>
    </w-modal-pop>
</view>
3,.wxss
 
.lgin {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32rpx;
  height: 80rpx;
  background-color: #d43c33;
  color: #fff;
  margin: 110rpx;
}
4,.js
 效果:
 








