• 微信小程序的开发学习(2)


    一.微信小程序:树形菜单

    由于项目需求,需要做一个类似树形菜单的东西来显示树状结构的数据。后端返回的数据为:

    [
        {
            "code":"00",
            "name":"总公司",
            "children":[
                {
                    "code":"0001",
                    "name":"东北分公司",
                    "children":[
                        {
                            "code":"000101",
                            "name":"辽宁分公司"
                        }
                    ]
                },
                {
                    "code":"0002",
                    "name":"西南分公司",
                    "children":[
                        {
                            "code":"000201",
                            "name":"成都分公司"
                        },
                        {
                            "code":"000202",
                            "name":"重庆分公司"
                        },
                        {
                            "code":"000203",
                            "name":"云南分公司"
                        }
                    ]
                },
                {
                    "code":"0003",
                    "name":"华南分公司",
                    "children":[
                        {
                            "code":"000301",
                            "name":"深圳分公司"
                        }
                    ]
                }
            ]
        }
    ]

    那么问题来了,小程序并没有树形控件,小程序无法动态新增子节点。此时非常怀念elementui啊~,百度很多说可以用多级嵌套wx:for来实现,但是太麻烦了,找了很久,发现有大佬做了一个组件,我就在大佬的组件基础上加以修改最后应用到我的项目中去。https://blog.csdn.net/haishangfeie/article/details/81040211  

    首先,我们引入插件path-view,然后在进行样式设计,相关代码如下:

     <view class="ruleZhezhao {{isRuleTrue?'isRuleShow':'isRuleHide'}}">
                  <view class='ruleZhezhaoContent'>
                      <image src='../../imgs/out1.png' class='ruleHide' bindtap='hideRule'></image>
                      <path-view keepLoc="{{true}}"  btnTxt='选中本项' catchtapBtn="selThis"  unnormalizedValue="{{unnormalizedValue2}}" contentKey="name">
                      </path-view>
                  </view>
              </view>

    css设计:

    .isRuleShow{
        display: block;
    }
    .isRuleHide{
        display: none;
    }
    .ruleZhezhao{
        height: 100%;
        width: 100%;
        position: fixed;
        background-color:rgba(0, 0, 0, .5);
        z-index: 2;
        top: 0;
        left: 0;
    }
    .ruleZhezhaoContent{
        z-index: 99;
        padding: 20rpx 0;
        width: 300px;
        height: 300px;
        background: #fff;
        margin: 40% auto;
        border-radius: 20rpx;
        /* display: flex; */
        flex-direction: column;
        justify-content: space-around;
        align-items: center;
        position: relative;
    }
    .ruleHide{
        height: 60rpx!important;
        width: 60rpx!important;
        position: absolute;
        top: 5rpx;
        right: 5rpx;
    }

    js设计:

    //获取事故单位
      showRule: function () {
        this.setData({
          isRuleTrue: true
    
        })
      },
      hideRule: function () {
        this.setData({
          isRuleTrue: false
        })
      },
      selThis(e) {
        // console.log(e.detail);
        this.setData({
          company_name: e.detail.name,
          company_code: e.detail.code,
          isRuleTrue: false
        })
      },

    最终实现版本如下:

    二.小程序的canvas层级最高问题

    项目需求为在canvas页面实现一个弹框。像map,canvas,video,textarea是由客户端创建的原生组件,原生组件的层级是最高的,所以页面中的其他组件无论设置z-index为多少,都无法覆盖在原生组件上。小程序有提到如何解决原生组件层级最高问题,比如cover-view,但是它也有一定限制,比如它只支持嵌套cover-view,cover-image,button。百度有提到几种办法,比如可以在点击弹框的时候将canvas转换为image。但是我没有实现,还有说可以在canvas中设置定位,比如设置left一个比较大的值,让canvas的显示超出屏幕范围。我想的是如果canvas 本身使用hidden或display:none无效的话。是否可以在外部的view设置是否显示,然后测试居然可以。

    如果没有设置的话效果如下:

    修改代码如下:

     <view class="container {{isRuleTrue?'isRuleHide':'isRuleShow'}}">
            <ec-canvas id="mychart-dom-line" canvas-id="mychart-line" ec="{{ecOne}}"></ec-canvas>
            <ec-canvas id="mychart-dom-bar"  canvas-id="mychart-bar"  ec="{{ecTwo}}"></ec-canvas>
          </view>  

     js代码:

    showRule: function () {
        this.setData({
          isRuleTrue: true
    
        })
      },
      hideRule: function () {
        this.setData({
          isRuleTrue: false
        })
      },

    修改后效果如下:

     
  • 相关阅读:
    Apache开启Rewrite环境
    php 写入和读取序列化的cookie
    discuzx 制作单页面
    php 操作postgresql
    已安装php动态安装pdo_mysql
    PHP 异步调用 后台调用 持续执行 断开连接/浏览器
    ssh配置文件详解
    gdb 调试中No symbol in current context 故障定位
    Linking fails : relocation truncated to fit: R_X86_程序占用内存大于2GB所导致的问题
    谨慎使用单精度/双精度数值类型
  • 原文地址:https://www.cnblogs.com/betty818/p/10887391.html
Copyright © 2020-2023  润新知