zoukankan      html  css  js  c++  java
  • 我的微信小程序入门踩坑之旅

    前言

    更好的阅读体验请:我的微信小程序入门踩坑之旅

    小程序出来也有一段日子了,刚出来时也留意了一下。不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做。这星期一,赶紧趁着这股热乎劲,也不是很忙,终于磨磨唧唧的写了个小demo,(当然还有好多接口没有使用)。

    预计阅读时间:5min

    正文

    介绍

    小程序的框架,挺像Vue的。

    wxml

    <view> Hello {{name}}! </view>
    <button bindtap="changeName"> Click me! </button>
    

      


    js部分
     

    // This is our App Service.
    // This is our data.
    var helloData = {
    name: 'WeChat'
    }
     
    // Register a Page.
    Page({
    data: helloData,
    changeName: function(e) {
    // sent data change to view
    this.setData({
    name: 'MINA'
    })
    }
    })
    

      


    开发者通过框架将逻辑层数据中的 name 与视图层的 name 进行了绑定,所以在页面一打开的时候会显示 Hello WeChat!
     

    当点击按钮的时候,视图层会发送 changeName 的事件给逻辑层,逻辑层找到对应的事件处理函数
    逻辑层执行了 setData 的操作,将 name 从 WeChat 变为 MINA,因为该数据和视图层已经绑定了,从而视图层会自动改变为 Hello MINA!

    工具: 微信 web 开发者工具
    我一般在这里只预览效果用。

    app.json

    app.json文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。

    改变pages里配置,会更改启动程序时的主页面。
    window是设置页面的窗口表现,包括状态栏,导航栏颜色 等等。
    tarbar是底部tab栏的表现。
    官方还有 networkTimeout和 debug选项,在这里没有配置。
    networkTimeout可以设置各种网络请求的超时时间。

     

    {
    "pages": [
    "pages/index/other",
    "pages/other/index",
    "pages/logs/logs",
    "pages/login/login",
    "pages/douban/douban",
    "pages/douban/user",
    "pages/other/comment"
    ],
    "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#3CB371",
    "navigationBarTitleText": "Ed Glayxe",
    "navigationBarTextStyle": "light",
    "backgroundColor": "#3CB371"
    },
    "tabBar": {
    "list": [{
    "pagePath": "pages/index/index",
    "text": "我的",
    "iconPath": "images/tabList/my_a.png",
    "selectedIconPath": "images/tabList/my_b.png"
    }, {
    "pagePath": "pages/logs/logs",
    "text": "日志",
    "iconPath": "images/tabList/log_a.png",
    "selectedIconPath": "images/tabList/log_b.png"
    }, {
    "pagePath": "pages/other/other",
    "text": "段子",
    "iconPath": "images/tabList/joke_a.png",
    "selectedIconPath": "images/tabList/joke_b.png"
    }, {
    "pagePath": "pages/login/login",
    "text": "登录",
    "iconPath": "images/tabList/Login_a.png",
    "selectedIconPath": "images/tabList/Login_b.png"
    }, {
    "pagePath": "pages/douban/douban",
    "text": "用户列表",
    "iconPath": "images/tabList/user_a.png",
    "selectedIconPath": "images/tabList/user_b.png"
    }]
    }
    }
    

     

      


    页面文件

    app.js、app.json、app.wxss这三个文件是必不可少的文件。.js后缀的是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件。微信小程序会读取这些文件,并生成小程序实例。这些都是公共文件。
    在我的wxss里引入了weui的wxss 有的页面使用了它的UI。

    Pages 里面是对应的页面。每个对应的页面里都有 相应的js wxml wxss文件。对文件进行配置。

    在common文件夹了 写了一个评论template 尝试了一下引入模板。
    在utils里封装了一下内部的方法。

    问题

    在小程序里支持flex布局,还是挺不错的。
    我有时布局的时候都给写个html文件,在浏览器里看看样式。然后照搬到微信小程序里。但是我写的页面并不复杂。并不能完全的发现更多的不同。
    在小程序里试图层为view ,但它并不像div一样,view 和text在一起会重叠。我觉得相当于 div和span。
    还有一些CSS样式并不支持。

    数据渲染:

    这个用flex布局写的,页面比较简单。

    我记得昨天有个东西我找了好久,就是
    “enablePullDownRefresh”: true。允许用户下拉。
    一开始我以为这是自己写的。这是配置在json文件里。官方的文件几乎没怎么看。。然后就尴尬了。

    var util = require("../../utils/util.js");
    var app = getApp();
     
    Page({
    data: {
    textDataList: [],
    tempid: 0,
    lastid: 0
    },
    onLoad: function() {
    util.alertLoading('数据加载中', 2000);
    this.loadData();
    },
    refreshData: function() {
    util.alertLoading('刷新中', 2000);
    this.loadData();
     
    },
    loadData: function() {
    var that = this;
    var url = 'http://api.budejie.com/api/api_open.php';
    var requireData = { a: 'list', c: 'data', type: '29' };
    util.request(url, requireData, function(res) {
    var newData = res.data;
    that.setData({
    textDataList: newData.list,
    tempid: newData.list[0].id
    })
    console.log(that.data.tempid);
     
    })
    },
    onReachBottom: function() {
    util.alertLoading("加载中!", 2000);
    console.log("加载这个没做 = =!");
    },
    onPullDownRefresh: function() {
    util.alertLoading("刷新中!", 1000);
    var that = this;
    var url = 'http://api.budejie.com/api/api_open.php';
    var requireData = { a: 'list', c: 'data', type: '29' };
    util.request(url, requireData, function(res) {
    var newData = res.data;
    that.setData({
    textDataList: newData.list,
    lastid: newData.list[0].id
    })
    console.log(that.data.lastid);
    });
    if (this.data.lastid === this.data.tempid) {
    util.alertSuccess("已经是最新了", 1000);
    }
    }
    })
    

      


    后续
    微信小程序思维导图(来源于网络)

    快下班了,其实写之前我想写的更详细一点,但更多的介绍我想没有比官方更清楚的。

    我觉得最好的学习方式就是撸一遍代码,比看10个demo有用的多。

    时间仓促,页面很简单。也希望把你的demo分享给我互相学习。感谢你的阅读,

    Bye。

    项目地址: https://github.com/miloers/WxSmall

     
  • 相关阅读:
    阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
    数据库中间件 ShardingJDBC 源码分析 —— SQL 解析(三)之查询SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(六)之删除SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(五)之更新SQL
    消息队列中间件 RocketMQ 源码分析 —— Message 存储
    源码圈 300 胖友的书单整理
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(一)分库分表配置
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(四)之插入SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由
    C#中Math类的用法
  • 原文地址:https://www.cnblogs.com/moustache/p/6122913.html
Copyright © 2011-2022 走看看