小程序自定义组件、页面跳转、数据存储

小程序自定义组件、页面跳转、数据存储

1、自定义组件

1、创建一个文件夹components来存放所有的组件

2、在该文件夹下创建组件文件夹,并在组件文件夹下右击新建Component组件,类似pages管理

3、在页面引用该组件在page.json注册

{
  "usingComponents": {
    "com": "/components/com/com"
  }
}

 

4、在页面.wxml使用,<com></com>

1、页面向组件传值

每个单独的页面都使用该组件,但是数据不相同时,我们可以通过使用该组件,并当前页面向组件传值

1、在组件.wxml 文件中有接收的变量

<!--components/com/com.wxml-->
<!-- name是页面决定的 -->
<view>这是com组件{{name}}</view>

2、在组件中的 .js 文件给这个变量name变成组件属性

// components/com/com.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    name:{  // 属性名
      type: String,  // 属性类型
      value: "zack"  // 属性默认值,在页面没有传时使用
    }
  },

3、在页面中使用组件时,给属性name赋值就行了

<com name = "Vicky"></com>  //可以是固定值
<com name = "{{p_name}}"></com> //这里的可以是变量

2、组件向页面传递事件

1、在组件.wxml中绑定一个事件

<button bindtap="com_jia" data-num="5">点我加5</button>

2、在组件.js 中d methods方法中写事件函数,通过this.triggerEvent("页面的事件")抛给页面

/**
   * 组件的方法列表
   */
  methods: {
    com_jia:function(e){
      console.log("com",e)  // 组件传递的参数在e.currentTarget.dataset
    this.triggerEvent("com_add", {num:e.currentTarget.dataset.num})
}
}

com_add是组件抛给页面的事件类型,所以我们在页面中使用该事件绑定

如果我们要通过组件给页面传递事件的时候传递参数可以使用:

{num:e.currentTarget.dataset.num}

3、页面.wxml 中使用组件传递的事件绑定

<com bind:com_add="p_add"></com> 

p_add是页面的事件函数

4、页面的事件响应函数在页面的.js 中响应

// pages/test/test.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    num: 1
  },
  p_add:function(e){
    console.log(e)  // 组件传递过来的参数在e.detail中
    this.setData({  // 通过this.setData控制当前页的数据变化
        num: this.data.num+ +(e.detail.num)
    })
  },

2、页面跳转

页面跳转有两种形式:一是通过标签跳转,二是通过js控制跳转

1、通过js控制跳转

// pages/test2/test2.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    name2: "vicky"
  },
  tiao:function(){
    // 只能往tabbar页面跳转,不能跳非tabbar页面,并且销毁所有的非tabbar页面,url不能携带参数
  //   wx.switchTab({
  //     url: '/pages/index/index',
  //   })
  
    // 可以打开页面的任意的页面,可以url携带参数,跳转的页面在unload中接收,销毁当前页
    // wx.reLaunch({
    //   url: '/pages/test/test?name="zack"&age=18',
    // })

    // 只能跳转到非tabbar页面,并销毁当前页,url可以携带参数
    // '+this.data.name2+'代表引用当前页的数据
    // wx.redirectTo({
    //   url: '/pages/test1/test1?name='+this.data.name2+'&age=17',
    // })

    // 只能跳转到非tabbar页面,url可以携带参数,页面没有被销毁
    // 页面最多栈有10层,可以通过wx.navigateBack({})来控制返回的页面
    wx.navigateTo({
      url: '/pages/test1/test1?name=shen',
    })
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    console.log('销毁test2')
  },
  test3的js中
// delta表示退回到第几层 click: function () { wx.navigateBack({ delta: 2, }) },
<!--pages/test2/test2.wxml-->
<text>pages/test2/test2.wxml</text>
<button bind:tap="tiao">跳转去test1</button>
test2>test1>test3

2、路由跳转的标签形式

具体见官方文档组件

 <navigator url="/pages/test/test" open-type="switchTab" >跳转到新页面</navigator>
 通过open-type来选择和上面一样的跳转方式,url控制跳转的页面

3、小程序本地数据的存储

wxml文件

<button bindtap="set_data"></button>
<button bindtap="get_data"></button>
<button bindtap="del">删除</button>

js文件

  set_data:function(){
    // 存数据
    wx.setStorageSync("name", "shen")
    wx.setStorageSync("name1", "zack")
  },

  get_data: function(){
    // 取数据
    console.log(wx.getStorageSync("name1"))
    // 修改
    wx.setStorageSync('name1', 'vicky')
    console.log(wx.getStorageSync("name1"))
  },

  del: function(){
    // wx.clearStorageSync()  // 清空所有
    wx.removeStorageSync("name")  // 删除指定的数据
  },

总结:

1、本地存储的用同步也有异步,用法一样,跟我们平时的同步异步一样

2、这个本地数据的生命周期和小程序的同步,要清除数据,除非我们写代码清除或者用户删除小程序,清除微信数据,否则没有时间期限的数据存储,永久存储

3、本地数据单个键最多存储1M,本地所有的数据不超过10M

4、小程序向Django等服务器发送请求接口(wx.request)

类似于vue的axios请求

.wxml文件

<button bindtap="qing">请求后台数据</button>

.js文件

  qing:function(){
    wx.request({
      url: 'http://127.0.0.1:8000/test/',  //路由
      data:{  // 数据
        'name': 'zack',
        'age': 18
      },
      method:'POST',  // 请求方式
      header:{  // 请求头,请求格式
        'content-type':'application/json'
      },
      success(e){  // 回调
        console.log(e.data)
      }
    })
  },

 

 注意:本地请求接口的时候,一定要关闭小程序编辑器中的 设置 -》项目设置-》本地设置-》不校验https域名

 

posted @ 2020-03-11 21:16  Mr沈  阅读(738)  评论(0编辑  收藏  举报