day02 微信小程序

内容回顾

  • 搭建环境

  • 全局配置

    • pages

    • window

    • tabbar

  • 页面

    • json

    • js

    • wxml

    • wxss

  • flex布局

    • display: flex

    • flex-direction: row/column

    • justify-content:...

    • align-item:...

  • 小程序开发

    • 组件(标签)

      • text

      • view

      • image

    • 样式

      • rpx

今日概要

  • 指令

  • api

  • 页面

 

今日内容

1. 跳转

1.1 对标签绑定点击事件(bindtap)

index.wxml:

data-变量="123" # 传参数

<view bindtap="clickMe" data-nid="123" data-name="SD" >点我跳转</view>

index.js:

复制代码
Page({
  ...
  /**
   *  点击绑定的事件
   * console.log(nid); 调试
   * var nid = e.currentTarget.dataset.nid; 获取参数
  */
  clickMe:function(e){
    var nid = e.currentTarget.dataset.nid;
    console.log(nid);
  }
})
复制代码

 

1.2 页面跳转(通过js的方式)

index.js:(跳转的url)

自己拼接传参:?id='+nid

注意:只能跳转到非tabbar(底部标签栏)页面

wx.navigateTo({
    url: '/pages/redirect/redirect?id='+nid
})

 

跳转到的页面如果想要接受参数,可以在onLoad方法中接受。

redirect.js

Page({
/**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log(options);
  }
})

 

1.3 通过标签跳转(另一种方式跳转)

index.wxml:

<navigator url="/pages/redirect/redirect?id=666">跳转到新页面</navigator>

 

2.数据绑定

html:(以往的方式 效率低)

复制代码
<html>
    ...
    
    <div id="content"></div>
    
    <script>
        var name = "李业迟到";
        $('#content').val(name);
    </script>
    
</html>
复制代码
  • vue.js (双向数据绑定)

    复制代码
    <html>
        <div id="app">
            <div>{{message}}</div>
        </div><script>
            new Vue({
              el: '#app',
              data: {
                message: '老男孩教育Python'
              }
            })
        </script>
        
    </html>
    复制代码

 

2.1 基本显示

  • bind.wxml:

    <view>数据1:{{message}}</view>
  • 展示数据(data里传参数)

    bind.js:(message做了数据绑定)

    复制代码
    // pages/bind/bind.js
    Page({
    ​
      /**
       * 页面的初始数据
       */
      data: {
        message:"沙雕李业",
      }
    )}
    复制代码

     

2.2 数据更新

  • wxml:

    <view>数据2:{{message}}</view><button bindtap="changeData">点击修改数据</button>

     

  • 修改数据setData({})

    js:

    复制代码
    Page({
      data: {
        message:"沙雕李业",
      },
      changeData:function(){
        // 修改数据 这个this指的是changeData
        this.setData({ message: "大沙雕李业"});
      }
    })
    复制代码

     

3.获取用户信息

方式一

  • wxml(官方不推荐用这个)

    <view bindtap="getUserName">获取当前用户名</view>

     

  • js

      
    复制代码
    getUserName:function(){
        // vx. 调用微信提供的接口 获取用户信息
        // success:调用成功 fail:调用失败
        wx.getUserInfo({
          success: function (res) {
            // 调用成功后触发
            console.log('success',res)
          },
          fail:function(res){
            // 调用失败后触发
            console.log('fail', res)
          }
        })
      },
    复制代码

     

方式二(推荐用这个中获取用户信息)

  • wxml(官方推荐用button按钮)

    这是写死的button open-type="getUserInfo"

    <button open-type="getUserInfo" bindgetuserinfo="xxxx">授权登录</button>

     

  • js

    复制代码
    xxxx:function(){
        wx.getUserInfo({
          success: function (res) {
            // 调用成功后触发
            console.log('success', res)
          },
          fail: function (res) {
            // 调用失败后触发
            console.log('fail', res)
          }
        })
      }
    复制代码

     

示例

  • wxml

    <!--pages/login/login.wxml-->
    <view>当前用户名:{{name}}</view>
    <view>
    当前头像:<image src="{{path}}" style="height:200rpx;width:200rpx;"></image>
      </view>
    <button open-type="getUserInfo" bindgetuserinfo="fetchInfo">获取信息button</button>

     

  • js:(注意这里有this问题)

    复制代码
    // pages/login/login.js
    Page({
    ​
      /**
       * 页面的初始数据
       */
      data: {
          name:"",
          path: "/static/default.png"
      },
      
      fetchInfo:function(){
         // 打开配置,手动授权。
         // wx.openSetting({})
         
        // 这个this指的是fetchInfo 这个函数可以绑定了data可以操作data
        var that = this;
        wx.getUserInfo({
          success:function(res){
            console.log(res);
            // 这个函数里如果有this指的是success函数 这个函数里没有绑定data无法操作data
            // 这个that指的是函数fetchInfo 可以操作data
            that.setData({
              name:res.userInfo.nickName,
              path:res.userInfo.avatarUrl
            })
          }
        })
      },
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
    ​
      },
    ​
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
    ​
      },
    ​
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
    ​
      },
    ​
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
    ​
      },
    ​
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
    ​
      },
    ​
      /**
       * 页面相关事件处理函数--监听用户下拉动作
       */
      onPullDownRefresh: function () {
    ​
      },
    ​
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
    ​
      },
    ​
      /**
       * 用户点击右上角分享
       */
      onShareAppMessage: function () {
    ​
      }
    })
    复制代码

     

    注意事项:

    • 想要获取用户信息,必须经过用户授权(button)会弹出一个按钮让用户选择。

    • 用户选择已授权

    • 用户不授权,可以通过调用wx.openSetting方法来重新弹出按钮让用户授权

      // 打开配置,手动授权。
      wx.openSetting({})

       

       

       

4.获取用户位置信息

  • wxml (绑定事件bindtap="getLocalPath")

    <view bindtap="getLocalPath">{{localPath}}</view>

     

  • js

    复制代码
     data: {
          localPath:"请选择位置",
      },
      getLocalPath:function(){
        var that = this;
        // 获取用户位置信息
        wx.chooseLocation({
          success: function(res) {
          // res.address 拿到地址
            that.setData({localPath:res.address});
          },
        })
      },
    复制代码

     

     

5. for指令

  • goods.wxml

    循环列表

    默认item定死的就是循环每个元素index代指索引

    <view wx:for="{{dataList}}" >{{index}} - {{item}}</view>

    自定义索引index和元素item

    <view wx:for="{{dataList}}" wx:for-index="idx" wx:for-item="x">{{idx}} - {{x}}

    循环展示字典

    <view wx:for="{{userInfo}}">{{index}} - {{item}}</view>

     

    复制代码
    <!--pages/goods/goods.wxml-->
    <text>商品列表</text>
    <view>
      <view wx:for="{{dataList}}" >{{index}} -  {{item}}</view>
      <view wx:for="{{dataList}}" wx:for-index="idx" wx:for-item="x">{{idx}} -  {{x}}</view>
    </view>
    <view>
      {{userInfo.name}}
      {{userInfo.age}}
    </view>
    <view>
      <view wx:for="{{userInfo}}">{{index}} - {{item}}</view>
    </view>
    复制代码

     


  • goods.js

     data: {
        dataList:["白浩为","海狗","常鑫"],
        userInfo:{
          name:"alex",
          age:18
        }
      },

     

6.获取图片(案例)

  • publish:wxml

    <!--pages/publish/publish.wxml-->
    <view bindtap="uploadImage">请上传图片</view>
    <view class="container">
      <image wx:for="{{imageList}}" src="{{item}}"></image>
    </view>
    ​

     

  • js

    复制代码
    data: {
      //默认展示两张图
        imageList: ["/static/hg.jpg", "/static/hg.jpg"]
      },
    ​
      uploadImage:function(){
        var that = this;
        //微信提供的apichooseImage
        wx.chooseImage({
          count:9,//最多选几张图
          sizeType: ['original', 'compressed'],//图片尺寸
          sourceType: ['album', 'camera'],//图片来源
          success:function(res){//接口掉用成功的回调函数
            // 设置data :imageList,页面上图片自动修改(选择的图片覆盖掉默认图片)。
            // that.setData({
            //   imageList: res.tempFilePaths
            // });
    // 保存着默认图片imageLis 再添加选择的图片tempFilePaths 用concat做列表拼接
            that.setData({
            //两个列表拼接用concat
              imageList: that.data.imageList.concat(res.tempFilePaths)
            });
          }
        });
      },
    复制代码

     

注意:图片目前只是上传到了内存。

 

总结

  • 标签(组件)

    • text

    • view

    • image

    • navigator,跳转到其他页面(默认只能跳转到非tabbar页面)相当于<a>标签

    • button,按钮(特殊:建议获取用户信息时)

  • 事件

    • bindtap 点击事件 传参:data-xx="123" 获取参数 :e.currentTarget.dataset

      <view bindtap="func"></view>

      <view bindtap="func" data-xx="123"></view>
      func:function(e){
      e.currentTarget.dataset
      }
  • api(微信自带api)

    • navigateTo 页面跳转

      wx.navigateTo({
      url: '/pages/redirect/redirect?id='+nid,
      })
    • openSetting 手动设置授权信息

      wx.openSetting({})
    • getUserInfo 获取用户信息

       wx.getUserInfo({
          success:function(res){
            console.log(res);
          }
        })

      注意:结合button按钮实现
    • chooseLocation 获取用户定位信息

      wx.chooseLocation({
          success: function(res) {
             
          },
        })
    • chooseImage 上传图片

      wx.chooseImage({
          count:9,
          sizeType: ['original', 'compressed'],
          sourceType: ['album', 'camera'],
          success:function(res){
             
          }
        });
  • 数据绑定 (后端修改数据前端自动修改)

  • for指令 (帮助循环展示列表或字典展示 后端修改数据必须调用setData) 注意:setData + this/that

 

 

作业

  1. 拍卖详细页面 

  2. 发布消息的页面

    <textarea></textarea>

     

     

  3. 功能点:

    • 拍卖列表页面通过for循环+后端数据展示信息。

    • 点击拍卖列表中的某项拍卖时,需要将自己的ID传递给 拍卖详细页面。

    • 上传图片

    • 选择位置

    •  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   贰号猿  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示