zoukankan      html  css  js  c++  java
  • 微信小程序日常踩坑笔记

    项目踩坑笔记

    wxss 中定义全局变量

    在 app.wxss 中定义全局变量,其它组件内可以直接使用

    /*
     主题颜色 通过变量来实现
     1 sass 中 存在 变量这个知识
     2 原生的css和wxss也是支持 变量
     */
     page{
       /* 定义主题颜色 */
       --themeColor:#eb4450;
       /*
        定义统一字体大小  假设设计稿 大小是 375px
        1px= 2rpx
        14px = 28rpx
         */
         font-size: 28rpx;
     }
    
     image{
        100%;
     }
    

    其它组件内使用

    .active{
      color: var(--themeColor);
      <!-- currentColor 继承使用当前字体颜色 -->
      border-left: 5rpx solid currentColor;
    }
    

    渲染数据相关问题

    输出字符串时候拼接变量

      <navigator wx:for="{{item1.children}}" wx:for-index="index2" wx:for-item="item2" wx:key="cat_id"
        url="/pages/goods_list/index?cid={{item2.cat_id}}">
        <image src="{{item2.cat_icon}}" mode="widthFix" lazy-load="false">
        </image>
        <view class="goods_name">{{item2.cat_name}}</view>
      </navigator>
    

    使用三元表达式,在变量不存在时候输出默认值

    <image src="{{item.goods_small_logo?item.goods_small_logo:'http://image5.suning.cn/uimg/b2c/newcatentries/0000000000-000000000160455569_1_400x400.jpg'}}" mode="widthFix" lazy-load="true">
      </image>
    
    <view class="menu_item  {{index===currentIndex?'active':''}}" wx:for="{{leftMenuList}}" wx:key="*this"
            bindtap="handleItemTap" data-index="{{index}}">
            {{item}}
          </view>
    

    替换路径

        this.setData({
          goodsObj: {
            goods_name: res.data.message.goods_name,
            goods_price: res.data.message.goods_price,
            // iphone部分手机  不识别 webp图片格式
            // 最好找到后台 让他进行修改
            // 临时自己改  确保后台存在 1.webp => 1.jpg
            goods_introduce: res.data.message.goods_introduce.replace(
              /.webp/g,
              ".jpg"
            ),
            pics: res.data.message.pics,
            isCollect,
          },
    

    小程序中的本地存储

    0 web 中的本地存储和小程序中的本地存储的区别
    1 写代码的方式不一样了
    web: localStorage.setItem("key", "value"); localStorage.getItem("key");
    小程序中: wx.setStorageSync("key", "value"); wx.getStorageSync("key");
    2 存的时候 有没有做类型转换
    web: 不管存入的是什么类型的数据,最终都会先调用一下 toString() ,把数据变成了字符串 再存入进去
    小程序: 不存在 类型转换的这个操作 存什么类型的数据进去,获取的时候就是什么类型
    1 先判断一下本地存储中有没有旧的数据
    {time: Date.noew(),data:[...]}
    2 没有旧数据 直接发送新请求
    3 有旧的数据 同时 旧的数据也没有过期 就使用 本地存储中的旧数据即可

    在小程序中设置 es7 的 async 语法

    es7 的 async 号称是解决回调的最终方案:
    1、在小程序的开发工具中,勾选 es6 转 es5 语法
    2、下载 facebook 的 regenerator 库中的 'regenerator/packages/regenerator-runtime/runtime.js'
    3、在小程序目录下新建文件夹 lib/runtime/runtime.js ,将代码拷贝进去
    4、在每一个需要使用 async / await 语法的页面 js 文件中,引入(不能全局引入)即可,只需引入,不必使用

    import regeneratorRuntime from '../../lib/runtime/runtime';
    

    父、子组件通信

    一、 父组件(页面) 向子组件 传递数据 通过 标签属性的方式来传递
    1 在子组件上进行接收 <Tabs tabs="{{tabs}}" binditemChange="handleItemChange" >
    2 把这个数据当成是 data 中的数据直接用即可

    // components/Tabs.js
    properties: {
      // 要接收的数据的名称
      tabs:{
        // type  要接收的数据的类型
        type:Array,
        // value  默认值
        value:[]
      }
    },
    

    二、 子向父传递数据 通过事件的方式传递
    1 在父组件声明需要监听触发的事件,并在调用子组件的标签上加入一个 自定义事件
    <Tabs tabs="{{tabs}}" binditemChange="handleItemChange" >
    2 在子组件触发父组件中的自定义事件 同时传递数据给 父组件
    this.triggerEvent("父组件自定义事件的名称",要传递的参数)

    图片上传

    上传文件的 api 不支持 多个文件同时上传 遍历数组 挨个上传

    
          chooseImgs.forEach((v, i) => {
            wx.uploadFile({
              // 图片要上传到哪里
              url: "https://img.545141.com/file.php",
              // 被上传的文件的路径
              filePath: v,
              // 上传的文件的名称 后台来获取文件  file
              name: "file",
              // 顺带的文本信息
              formData: {},
              success: (result) => {
                let url = JSON.parse(result.data);
                this.UploadImgs.push(url);
                // 所有的图片都上传完毕了才触发
                if (i === chooseImgs.length - 1) {
                  wx.hideLoading();
                  // 此处暂时模拟提交
                  // 提交都成功了
                  // 重置页面
                  this.setData({
                    textVal: "",
                    chooseImgs: [],
                  });
                  // 返回上一个页面
                  wx.navigateBack({
                    delta: 1,
                  });
                }
              },
            });
          });
    

    发布项目

    1、详情-本地设置-【取消勾选】不校验合法域名
    2、修改 APPID 为企业微信 ID
    3、点击上传按钮
    4、在微信公众平台 管理-版本管理-提交审核

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/jiaoshou/p/13841665.html
Copyright © 2011-2022 走看看