美文网首页
微信小程序tabs组件

微信小程序tabs组件

作者: 思念LY | 来源:发表于2018-03-28 11:32 被阅读470次
img.gif

自定义组件教程
参考教程1
参考教程2

组件之间的关联

tabs 内部包含tab,relations 是parent 和child 的关系

代码目录结构

使用微信开发者工具--新建Page和Component(Tabs和tab)生成文件

目录如下

  • component
    • Tabs
      • tab
        • tab.js
        • tab.json
        • tab.wxml
        • tab.wxss
      • tabs.js
      • tabs.json
      • tabs.wxml
      • tabs.wxss
  • page
    • index.js
    • index.json
    • index.wxml
    • index.wxss

页面代码

active控制进入页面时显示的内容,title 是切换的标题

index.wxml

<view>
  <tabs>
    <tab title='选项1'>
        <view>111</view>
    </tab>
    <tab title='选项2' active>
        <view>222</view>
    </tab>
    <tab title='选项3'>
        <view> 333</view>
    </tab>
  </tabs>
</view>

index.json

定义当前页面使用的组件

{
  "navigationBarTitleText": "Tab",
  "usingComponents": {
    "tabs": "/component/Tabs/tabs",
    "tab": "/component/Tabs/tab/tab"
  }
}

组件代码

tabs.wxml

<view class="weui-tab">
  <view class="weui-navbar">
    <block wx:for="{{listTitles}}" wx:for-index="idx" wx:for-item="item" wx:key="*this">
      <view data-idx="{{idx}}" bindtap="action" class="weui-navbar__item {{activeIndex == idx ? 'weui-bar__item_on' : ''}}">
        <view class="weui-navbar__title">{{item}}</view>
      </view>
    </block>
  </view>
  <view class="weui-tab__panel">
      <slot></slot>
  </view>
</view>

tabs.wxss

引用weui的样式,注意修改自己的路径

@import "/component/libs/weui/weui.wxss";

.weapp-tab .weui-navbar__item{
  background: #f5f5f5;
  color: #32b16c;
  height: 20px;
  line-height: 20px;
  font-size: 12px;
  text-align: center;
  display: inline-block;
}

.weapp-tab .weui-bar__item_on{
  color: #fff;
  background: #32b16c;
}


.weui-navbar__item{
  position: relative;
  top: 1px;
}

.weui-bar__item_on{
  border-bottom: 1px solid #1aad19;
}

tabs.json

{
  "component": true,
  "usingComponents": {}
}

tabs.js

Component({
  options:{
    multipleSlots: true
  },
  relations:{
    './tab/tab':{
      type:'child',
      linked: function(target) {
        // console.log(target)
        this.data.listTitles.push(target.data.title);
        this.setData({
          listTitles: this.data.listTitles
        })
      }
    }
  },
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    listTitles:[],
    activeIndex: 0
  },
  ready:function(){
    var nodes = this.getRelationNodes('./tab/tab');
    let noActive = nodes.every(function(v){
      return v.getActive() == false;
    })
    if(noActive){
      nodes[0]._active(true);
      return;
    }
    nodes.map((v,i)=>{
      if(nodes[i].getActive()){
        nodes[i]._active(true);
        this.setData({activeIndex: i})
      }
    })
  },
  /**
   * 组件的方法列表
   */
  methods: {
    action(event) {
      let { activeIndex} = this.data;
      let idx = event.currentTarget.dataset.idx;

      if (activeIndex == idx) return;
      activeIndex = idx;
      let nodes = this.getRelationNodes('./tab/tab');
      nodes.map((v,i)=>{
        nodes[i]._active(activeIndex == i)
      })
      activeIndex = idx;

      this.setData({
        activeIndex: activeIndex
      });

      this.triggerEvent('change', { activeIndex });
    }
  }
})

tab.wxml

<view  hidden='{{!visiable}}'>
  <slot></slot>
</view>

tab.json

{
  "component": true,
  "usingComponents": {}
}

tab.js

// component/Tabs/tab/tab.js
Component({

  relations:{
    '../tabs':{
      type: 'parent',
    }
  },

  properties: {
    title: String,
    active :{
      type: Boolean,
      value:false
    },
  },
  /**
   * 组件的初始数据
   */
  data: {
    visiable: false,
  },

  /**
   * 组件的方法列表
   */
  methods: {
    _active:function(arg){
      if(arg){
        this.setData({
          visiable:true
        })
      } else {
        this.setData({
          visiable:false
        })
      }
    },
    getActive:function(){
      return this.properties.active;
    }
  }
})

相关文章

  • 微信小程序tabs组件

    自定义组件教程参考教程1参考教程2 组件之间的关联 tabs 内部包含tab,relations 是parent ...

  • 微信小程序组件: Tabs

    涉及小知识:小程序组件动态传值~芜湖我太开心啦其实很多知识都是通着的..只是有些时候可能钻进了牛角尖于是就把自己卡...

  • 小程序好文集合

    组件篇 微信小程序:组件实践 整体梳理 微信小程序开发深入解读

  • 微信小程序-canvas压缩图片使用入门

    微信小程序canvas组件官方文档 微信小程序canvas组件官方文档canvas API canvas组件介绍 ...

  • 微信小程序日历组件开发

    # 微信小程序日历组件开发 微信小程序基础知识 微信小程序 框架介绍 组件文档 上述是开发小程序的基本知识。 今天...

  • 微信小程序基础

    微信小程序介绍微信小程序开发工具的使用微信小程序框架文件微信小程序逻辑层微信小程序视图层微信小程序组件介绍微信小程...

  • 微信小程序组件探究和应用

    把玩微信小程序组件 微信小程序把玩《二》:页面生命周期,模块化,数据绑定,view组件 微信小程序把玩《三》:sc...

  • 微信小程序性能优化实践

    历史回顾: 微信小程序自定义组件 - 表格组件来啦 通过微信小程序来实现 “钉钉打卡” 记一次微信小程序项目分包,...

  • 微信小程序动态设置tabs组件的高度

    微信小程序的tabs组件真的很d 疼 ,由于采用的是swiper的缘故,所以它的默认高度只有150px;现在假设有...

  • 微信小程序组件化开发

    什么是组件化开发 微信小程序的组件和Vue的组件非常相似。 在微信小程序中有很多内置组件,比如button vie...

网友评论

      本文标题:微信小程序tabs组件

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