zoukankan      html  css  js  c++  java
  • day87

    我的第一个微信小程序

    一、小程序开发文档

    搜索进入“微信公众平台”官方网站,在下方的“账号分类”中,查看“小程序”中的“小程序开发文档”,在“工具”中,选择“微信开发者工具”,下载安装包:稳定版

    二、注册登录

    在“微信公众平台”首页右上方“立即注册”,选择“小程序”,“绑定邮箱(使用没有在微信公众平台绑定过的邮箱)”、“邮箱激活”、“信息登记”。

    输入邮箱密码进行登录。

    然后在微信上同意即可。微信扫码也可以登录。

    三、新建项目

    登录成功后,选择小程序,创建项目demo1,自定义目录位置,注册AppID(在已经登录的微信公众平台,小程序信息—>配置服务器—>开发设置—>复制粘贴AppID)。

    添加开发者:就是在公司中会用到,添加项目成员的,可以合作开发项目。

    选择“不使用云服务”,使用JavaScript语言,新建。

    创建成功后,也可以新建项目。

    四、导入项目

    导入项目(本机下载好的其他人的项目),也可以改项目名称,目录就是本机下载好的项目,AppID是别人的,要改成自己的,这样就是自己的项目了。

    五、删除项目

    在登录后,管理项目可以删除项目,只是在编辑器中删除了,真实的还没删除。

    永久删除要去硬盘中删除。

    六、项目组成

    项目分三大块:模拟器,编辑器,调试器

    模拟器:相当于一部手机

    编辑器:写代码的

    调试器:编辑器的下半部分(Network:请求,AppData:记录app里面的数据,可以把数据保存在手机的内存中,Storage:记录本地数据,可以把数据保存在手机的硬盘中,比如内存卡,Wxml:可以查看HTML代码,而谷歌中查看HTML使用Elements)

    七、工具栏

    一般使用普通编译,编译后的小程序才能应用。

    预览:生成一张二维码可以用手机扫码查看里面的功能,这里不能查看功能的错误信息

    真机调试:扫码二维码在手机上点击功能,可以在调试器中的Console中查看打印的功能的错误信息(要上线,有自己的域名)

    切换后台:场景值就代表通过不同的场景进来的

    清除状态:一般全部清除,也可以根据需求清除

    上传:就是把写好的代码上传到小程序应用中,然后人工审核

    详情:本地设置中,本地调试把(不校验合法域名....取消掉),线上无所谓

    八、小程序目录

    pages:所有页面,一个文件夹一个页面

    index.js:写逻辑,动态请求效果

    index.json:页面配置

    index.wxml: 静态html文件

    index.wxss: 写css样式

    utils:写公共方法

    app.js:创建小程序对象+启动文件

    app.json:整个小程序页面配置

    app.wxss: 全局css样式

    project.config.json:项目配置文件,比如版本(不要动)

    sitemap.json:搜索信息,比如搜索车票

    九、全局配置

    页面pages配置(添加页面):在app.json中,添加test页面,放在第一行

    "pages": [
        "pages/test/test",
        "pages/index/index",
        "pages/logs/logs"
      ],
      pages页面中括号里面是数组
    

    进入test文件夹,test.wxml

    <text>pages/test/test.wxml在test页面中可以显示</text>
    

    注意:json文件代码不能注释

    window配置:

     "window": {
        "backgroundTextStyle": "light",(下拉loading样式:只允许黑色dark或白色light)
        "navigationBarBackgroundColor": "#fff",  (导航条背景颜色配置)
        "navigationBarTitleText": "WeChat",		(导航条标题文本内容)
        "navigationBarTextStyle": "black"(导航条文本样式:只能是黑色black或白色white)
        "enablePullDownRefresh":true  (是否开启全局的下拉刷新)
      },
     window里面花括号里面是对象 
    

    微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/config.html

    tabBar底部选项卡导航设置:

    "tabBar": {
        "color": "#0000FF",(未被选中的图标颜色)
        "selectedColor": "#FF0000",(已被选中的图标颜色)
        "backgroundColor": "#FFCCFF",(图标的背景颜色)
        "borderStyle": "black",(边框样式:只能是黑色black或白色white)
        "list": [
          {
          "pagePath": "pages/test/test",(页面路径,点击可以跳转页面)
          "text": "这是text",(文本内容)
          "iconPath": "images/icon1.png",   (图标路径:未被选中)    
          "selectedIconPath": "images/icon1-active.png"(图标路径:已被选中)
        },
        {
          "pagePath": "pages/test2/test2",
          "text": "这是text2",
          "iconPath": "images/icon2.png",
          "selectedIconPath": "images/icon2-active.png"
        }
        ]
      },
    
    tabBar里面的list至少包含2个,不能超过5个
    
    在pages中添加一个test2页面
    未选中的是一个图标,已经选择的是一个图标,创建一个目录images,右击images文件夹,选择硬盘中打开,电脑已经准备好的图标
    

    十、页面配置

    test2中test2.json页面文件配置(和全局的区别,全局写在window下,布局不需要)

    {
      "usingComponents": {},
      "navigationBarBackgroundColor": "#00CC00",
      "navigationBarTitleText": "test2的导航条标题文本内容",
      "navigationBarTextStyle": "white"
    }
    

    十一、页面数据渲染

    // pages/test/test.js
    Page({
    
      /**
       * 页面的初始数据
       */
       data: {
        a:"傻逼",
        name:"张三",(字符串类型)
        num1:1,
        num:2,(数字类型)
        flag:false,(布尔值)
        list_name: [{ "name": "张三", like: "吃" }, { "name": "李四", like: "喝" }, { "name": "王五", like: "玩" }]   (数组类型)
      },
      
      
      
    /* pages/test/test.wxss */
    /* id选择器 */
    .sb {
       200rpx;
      height: 100rpx;
      background-color: blue
    }
    
      
    // pages/test/test.wxml
    
    注释:view是标签
    
    <view id="age-{{num}}">
    {{name}}is{{a}}
    age is {{num}}
    </view>
    
    <view>{{num+num1}}</view> (加运算)
    <view>{{num}}*{{num1}}</view> (乘运算)
    <view>{{num+a}}</view> (拼接)
    <view>{{num}}+{{a}}</view> (数字+字符串)
    <checkbox checked="{{false}}">复选框</checkbox>(布尔值)
    <checkbox checked="{{flag}}">复选框</checkbox>(带有布尔值的变量)
    复选框默认未被选中
    
    <view wx:for="{{list_name}}" wx:key="index">   (循环数组内容)
    {{index}}:{{item.name}} --->{{item.like}}   (数组内容索引)
    
    </view>
    
    <!-- 和上面对比,同样也是标签循环,把item改成key,index改成val -->
    <view wx:for="{{list_name}}" wx:for-item="val" wx:for-index="key" wx:key="index">
    {{key}}:{{val.name}} --->{{val.like}}
    
    </view>
    
    <!-- 块内循环 -->
    <block wx:for="{{list_name}}">
    {{index}}:{{item.name}} --->{{item.like}}
    
    </block>
    
    <view wx:if="{{num<5}}">    (条件判断)
    你是傻逼
    </view>
    
    <view class="sb"> (id选择器)
    </view>
    
    这样就可以渲染到test页面中
    

    wxss样式:https://www.cnblogs.com/xiaoyuanqujing/articles/11644430.html

    十二、小程序的双线程模型与生命周期

    双线程包含两部分:渲染层(对应wxml文件)、逻辑层(对应js文件)

    小程序启动流程:https://www.cnblogs.com/xiaoyuanqujing/articles/11767693.html

    其他内容:搜索APICloud,这个工具可以快速创建打包一个应用程序(知识点:js,html,css)

    小程序整体逻辑:小程序<=>微信官方服务器 <=>自己的web服务

    十三、事件和事件冒泡

    事件:https://www.cnblogs.com/xiaoyuanqujing/articles/11644436.html

    // pages/test/test.js
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        a: "sb",
        name: "tank",
        num: 1,
        num1: 2,
        flag: true,
        list_name: [{ "name": "tank", like: "嫖" }, { "name": "jason", like: "约炮" }, { "name": "饼哥", like: "学习" }],
        num_a: 1
    
      },
    /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        console.log("我是onLoad")
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
        console.log("我是onReady")
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
        console.log("我是onShow")
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
        console.log("我是onHide")
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
        console.log("我是 onUnload")
      },
    
      /**
       * 页面相关事件处理函数--监听用户下拉动作
       */
      onPullDownRefresh: function () {
        console.log("我是onPullDownRefresh")
      },
    
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
        console.log("我是 onReachBottom")
      },
      click1: function (e) {
        console.log(e)
        console.log(e.currentTarget.dataset.name)
        console.log("你点我了")
      },
      click2: function (e) {
        console.log(e)
    
        console.log("你在外面蹭")
      },
      click3: function (e) {
        console.log(e)
    
        console.log("我进去了")
      },
      jia: function () {
        var that = this
    
        that.setData({
          num_a: that.data.num_a + 1
        })
    
      },
      click4: function (e) {
        console.log(e)
    
        console.log("你在外面蹭的捕获")
      },
      click5: function (e) {
        console.log(e)
    
        console.log("我进去了,捕获")
      },
      click6: function (e) {
        console.log(e)
    
        console.log("你在外面蹭,冒泡")
      },
      click7: function (e) {
        console.log(e)
    
        console.log("我进去了,冒泡")
      },
    
    
    })
    
    ====================================
    
    <!--pages/test/test.wxml-->
    <!-- <text>pages/test/test.wxml</text> -->
    <view id="age-{{num}}">
    {{name}} is  {{a}}
    age is {{num}}
    </view>
    
    <view>{{num *num1 }}</view>
    <view>{{num}} * {{num1 }}</view>
    <view>{{name + a }}</view>
    <view>{{name}} + {{ a }}</view>
    
    <checkbox checked="{{false}}">
      选我
    </checkbox>
    
    <checkbox checked="{{flag}}">
      选我
    </checkbox>
    
    <view wx:for="{{list_name}}" wx:key="index" >
      {{index}}:{{item.name}} --->{{item.like}}
    </view>
    
    <view wx:for="{{list_name}}" wx:for-item="val" wx:for-index="key" wx:key="index">
      {{key}}:{{val.name}} --->{{val.like}}
    </view>
    
    <block wx:for="{{list_name}}"  wx:key="index">
      {{index}}:{{item.name}} --->{{item.like}}
    </block>
    
    
    <!-- <view wx:if="{{num<5}}">
    egon is sb
    
    </view> -->
    
    <!-- <view class="sb">
    
    
    </view> -->
    <button bind:tap="click1" data-name="sb" id="sdasd" class="ss">按钮</button>
    
    <view class="outter" bindtap="click2" data-name="tank">
    
    外面
    <view class="inner" bindtap="click3" data-name="jason">
    
    里面</view>
    </view>
    
    <view>{{num_a}}</view>
    <button bind:tap="jia">加</button>
    
    
    <view class="outter"  capture-bind:tap="click4" bind:tap="click6" data-name="tank">
    
    外面
    <view class="inner" capture-bind:tap="click5" catch:tap="click7" data-name="jason">       (catch可以阻止事件传递)
    
    里面</view>
    </view>
    
    capture-bind-->捕获
    bin-->冒泡
    
    
  • 相关阅读:
    ThinkPHP框架被爆任意代码执行漏洞
    thinkphp session 跨域问题解决方案
    网摘地址
    thinkphp的各种内部函数 D()、F()、S()、C()、L()、A()、I()详解
    IP相关(近两天的学习总结)
    ThinkPHP 手册摘录之(跨模块)调用
    c#让程序在WIN7下兼容模式运行
    QT学习之经典控件源码(如此强大)
    C#自定义控件七水波纹
    C#自定义控件五报警按钮
  • 原文地址:https://www.cnblogs.com/gfhh/p/12292322.html
Copyright © 2011-2022 走看看