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、在微信公众平台 管理-版本管理-提交审核

  • 相关阅读:
    [翻译]ASP.NET MVC 3 开发的20个秘诀(六)[20 Recipes for Programming MVC 3]:找回忘记的密码
    No.9425 [翻译]开发之前设计先行
    [翻译]ASP.NET MVC 3 开发的20个秘诀(五)[20 Recipes for Programming MVC 3]:发送欢迎邮件
    内联(inline)函数与虚函数(virtual)的讨论
    内联函数、模板、头文件杂记(转)
    gdb使用整理
    data structure and algorithm analysis上一点摘录
    lsof by example 例子
    linux core文件机制
    转一篇shared_ptr的小文
  • 原文地址:https://www.cnblogs.com/jiaoshou/p/13841665.html
Copyright © 2011-2022 走看看