小程序框架->框架,视图层,生命周期(逻辑层)

news/2024/7/20 3:45:31 标签: 小程序, java, 前端
  • 框架
  • 视图层
  • 生命周期(逻辑层)

1.框架

小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务。

整个小程序框架系统分为两部分:**[逻辑层](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/)**(App Service)和 **[视图层](https://developers.weixin.qq.com/miniprogram/dev/framework/view/)**(View)。小程序提供了自己的视图层描述语言 `WXML` 和 `WXSS`,以及基于 `JavaScript` 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。
 

2.视图层

java">//min2\app.json
{
  "pages":[
    "pages/a/a",
    "pages/b/b",
    "pages/c/c",
    "pages/d/d",
    "pages/user/user",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#00f",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle":"black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

java">//min2\pages\a\a.js
C:\Users\朱\WeChatProjects\min2\pages\a\a.json
C:\Users\朱\WeChatProjects\min2\pages\a\a.wxml
C:\Users\朱\WeChatProjects\min2\pages\a\a.wxss
<!--pages/a/a.wxml-->
<view> {{message}} </view>
<view wx:for="{{array}}"> {{item}} </view>
<view wx:for="{{users}}"> 用户编号:{{item.id}};用户姓名:{{item.name}} </view>

<!--wxml-->
<view wx:if="{{view == '1'}}"> WEBVIEW </view>
<view wx:elif="{{view == '2'}}"> APP </view>
<view wx:else="{{view == '3'}}"> MINA </view>

<!--wxml-->
<template name="staffName">
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>

<view id="tapTest" data-hi="Weixin" data-meetingState="6" bindtap="tapName"> Click me! </view>
java">// pages/a/a.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
        message: 'Hello 页面一',
        array:[1,2,3,4,5],
        users:[{id:1,name:'牛逼'},{id:2,name:'晴天'},{id:3,name:'雨天'}],
        view:2,
        staffA: {firstName: 'Hulk', lastName: 'Hu'},
        staffB: {firstName: 'Shang', lastName: 'You'},
        staffC: {firstName: 'Gideon', lastName: 'Lin'}
  },
  tapName: function(event) {
    console.log(event);
    console.log(event.target.dataset);
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

2.生命周期(逻辑层)

## 响应的数据绑定

框架的核心是一个响应的数据绑定系统,可以让数据与视图非常简单地保持同步。当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新。

java">//min2\app.json
{
  "pages":[
  "pages/index/index",
  "pages/a/a",
  "pages/b/b",
  "pages/c/c",
  "pages/d/d",
  "pages/user/user",
  "pages/logs/logs"
],
"window":{
  "backgroundTextStyle":"light",
  "navigationBarBackgroundColor": "#00f",
  "navigationBarTitleText": "Weixin",
  "navigationBarTextStyle":"black"
},
"tabBar": {
  "list": [{
    "pagePath": "pages/index/index",
    "text": "首页"
  }, {
    "pagePath": "pages/a/a",
    "text": "a页面"
  }, {
    "pagePath": "pages/b/b",
    "text": "b页面"
  }]
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}
  


 

java">// pages/a/a.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
        message: 'Hello 页面一',
        array:[1,2,3,4,5],
        users:[{id:1,name:'牛逼'},{id:2,name:'晴天'},{id:3,name:'雨天'}],
        view:2,
        staffA: {firstName: 'Hulk', lastName: 'Hu'},
        staffB: {firstName: 'Shang', lastName: 'You'},
        staffC: {firstName: 'Gideon', lastName: 'Lin'}
  },
  tapName: function(event) {
    console.log(event);
    console.log(event.target.dataset);
  },
  a2b:function() {
    wx.switchTab({
      url: '/pages/b/b',
    })
  },
  a2c:function() {
    wx.navigateTo({
      url: '/pages/c/c',
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
console.log("a.onload");
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log("a.onReady");
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log("a.onShow");
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log("a.onHide");
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log("a.onUnload");
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

 

java"><!--pages/a/a.wxml-->
<view> {{message}} </view>
<view wx:for="{{array}}"> {{item}} </view>
<view wx:for="{{users}}"> 用户编号:{{item.id}};用户姓名:{{item.name}} </view>

<!--wxml-->
<view wx:if="{{view == '1'}}"> WEBVIEW </view>
<view wx:elif="{{view == '2'}}"> APP </view>
<view wx:else="{{view == '3'}}"> MINA </view>

<!--wxml-->
<template name="staffName">
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>

<view id="tapTest" data-hi="Weixin" data-meetingState="6" bindtap="tapName"> Click me! </view>

<button bindtap="a2b">a页面跳B页面</button>
<button bindtap="a2c">a页面跳C页面</button>
java">// pages/b/b.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log("b.onload");
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady() {
        console.log("b.onReady");
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow() {
        console.log("b.onShow");
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide() {
        console.log("b.onHide");
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload() {
        console.log("b.onUnload");
      },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
java">// pages/c/c.js
// import c from cs
Page({
  /**
   * 页面的初始数据
   */
  data: {
      
  },
  c2b:function() {
    wx.switchTab({
      url:'/pages/b/b',
    })
  },
  c2d:function() {
    wx.navigateTo({
      url: '/pages/d/d',
    })
  },
   /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log("c.onload");
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady() {
        console.log("c.onReady");
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow() {
        console.log("c.onShow");
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide() {
        console.log("c.onHide");
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload() {
        console.log("c.onUnload");
      },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
java"><!--pages/c/c.wxml-->
<text>pages/c/c.wxml</text>
<button bindtap="c2d">c页面跳d页面</button>
<button bindtap="c2b">c页面跳b页面</button>
java">// pages/d/d.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log("d.onload");
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady() {
        console.log("d.onReady");
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow() {
        console.log("d.onShow");
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide() {
        console.log("d.onHide");
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload() {
        console.log("d.onUnload");
      },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

结论:

一级不会销毁;

二级层级深跳到层级低的会销毁;

二级层级低级跳到深层级只会隐藏;

隔代中间所有页面会被销毁;


http://www.niftyadmin.cn/n/5092685.html

相关文章

基于人工电场优化的BP神经网络(分类应用) - 附代码

基于人工电场优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于人工电场优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.人工电场优化BP神经网络3.1 BP神经网络参数设置3.2 人工电场算法应用 4.测试结果…

二、电脑装机实践

计算机装机实践 一、零部件组装与启动二、操作系统安装与使用2.0 先导内容&#xff1a;BIOS引导模式、Boot Loader-引导加载程序、硬盘分区模式2.1 Win11安装2.2 Ubuntu22.042.2.0 Ubuntu简介2.2.1 Ubuntu22.04安装2.2.2 Ubuntu22.04使用2.2.2.1 新建文件模版2.2.2.2 给新安装应…

maven 新建模块 导入后 按Ctrl 点不进新建模块pom定义

新建的ruoyi-common-mybatisplus 模块,导入一直不正常 画出的模块一直导入不进来 这是提示信息 这是正常的提示信息 加上 <version>3.6.3</version> 后,才一切正常

1-图像读取

skimage import skimage from skimage import io, color# 读取灰度图&#xff0c;能做到16bit无损 img io.imread(CT-220s_681.tif) # 直接就是numpy类型&#xff0c;dtype根据图片格式决定,np默认float64格式 print(img.shape, type(img), img.dtype) print(img)# 读取彩色…

港科大提出适用于夜间场景语义分割的无监督域自适应新方法

跟大家分享港科大提出的无监督域自适应夜间场景语义分割方法&#xff0c;该方法对夜间的动态目标和小目标做了针对性的优化。 论文标题&#xff1a;Towards Dynamic and Small Objects Refinement for Unsupervised Domain Adaptative Nighttime Semantic Segmentation机构&…

未来展望:大型语言模型与 SQL 数据库集成的前景与挑战

一、前言 随着 GPT-3、PaLM 和 Anthropic 的 Claude 等大型语言模型 (LLM) 的出现引发了自然语言在人工智能领域的一场革命。这些模型可以理解复杂的语言、推理概念并生成连贯的文本。这使得各种应用程序都能够使用对话界面。然而&#xff0c;绝大多数企业数据都存储在结构化 …

【1day】用友U8Cloud未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

基于nodejs+vue水浒鉴赏平台系统

该平台内容丰富&#xff0c;便于操作。 零碎化的信息带给我们的短暂快感&#xff0c;人们沉寂在网络游戏、短视频、网络聊天&#xff0c;沉寂其中无法自拔。脱离现实、胡编乱造、五花八门的网络小说&#xff0c; 优秀的文化传承&#xff0c;学习和借鉴才是当今社会需要的。 …