用户工具

站点工具


mina:page_function

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
mina:page_function [2020/08/24 14:37] – [2. 事件处理函数] sabertoymina:page_function [2020/08/24 15:36] (当前版本) – [5. 使用 Component] sabertoy
行 49: 行 49:
  
 ==== - Page.route ==== ==== - Page.route ====
 +
 +到当前页面的路径,类型为String。
  
   Page.prototype.route    Page.prototype.route 
 <wrap em>route</wrap>字段可以获取到当前页面的路径。 <wrap em>route</wrap>字段可以获取到当前页面的路径。
-  Page.prototype.setData()+ 
 +==== - Page.prototype.setData() ==== 
 + 
 +  Page.prototype.setData(Object data, Function callback) 
 +  
 <wrap em>setData</wrap> 函数用于将数据从逻辑层发送到视图层,同时改变对应的<wrap em> this.data</wrap> 的值。 \\ <wrap em>setData</wrap> 函数用于将数据从逻辑层发送到视图层,同时改变对应的<wrap em> this.data</wrap> 的值。 \\
  
行 60: 行 66:
   * 直接修改 this.data 而 :!: 不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致    * 直接修改 this.data 而 :!: 不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致 
   * 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。   * 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
 +
 +<code xml>
 +<!--index.wxml-->
 +<view>{{text}}</view>
 +<button bindtap="changeText"> Change normal data </button>
 +<view>{{num}}</view>
 +<button bindtap="changeNum"> Change normal num </button>
 +<view>{{array[0].text}}</view>
 +<button bindtap="changeItemInArray"> Change Array data </button>
 +<view>{{object.text}}</view>
 +<button bindtap="changeItemInObject"> Change Object data </button>
 +<view>{{newField.text}}</view>
 +<button bindtap="addNewField"> Add new data </button>
 +</code>
 +
 +<code javascript>
 +// index.js
 +Page({
 +  data: {
 +    text: 'init data',
 +    num: 0,
 +    array: [{text: 'init data'}],
 +    object: {
 +      text: 'init data'
 +    }
 +  },
 +  changeText: function() {
 +    // this.data.text = 'changed data' // 不要直接修改 this.data
 +    // 应该使用 setData
 +    this.setData({
 +      text: 'changed data'
 +    })
 +  },
 +  changeNum: function() {
 +    // 或者,可以修改 this.data 之后马上用 setData 设置一下修改了的字段
 +    this.data.num = 1
 +    this.setData({
 +      num: this.data.num
 +    })
 +  },
 +  changeItemInArray: function() {
 +    // 对于对象或数组字段,可以直接修改一个其下的子字段,这样做通常比修改整个对象或数组更好
 +    this.setData({
 +      'array[0].text':'changed data'
 +    })
 +  },
 +  changeItemInObject: function(){
 +    this.setData({
 +      'object.text': 'changed data'
 +    });
 +  },
 +  addNewField: function() {
 +    this.setData({
 +      'newField.text': 'new data'
 +    })
 +  }
 +})
 +</code> 
 +
 +===== -#3 页面间通信 =====
 +
 +===== -#4 使用 behaviors() =====
 +
 +[[https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html | behaviors]] 可以用来让多个页面有<wrap em>相同的数据字段和方法</wrap>。 [[https://developers.weixin.qq.com/miniprogram/dev/reference/api/Behavior.html|参数说明]]
 +
 +<code javascript>
 +// my-behavior.js
 +module.exports = Behavior({
 +  data: {
 +    sharedText: 'This is a piece of data shared between pages.'
 +  },
 +  methods: {
 +    sharedMethod: function() {
 +      this.data.sharedText === 'This is a piece of data shared between pages.'
 +    }
 +  }
 +})
 +</code> 
 +
 +<code javascript>
 +// page-a.js
 +var myBehavior = require('./my-behavior.js')
 +Page({
 +  behaviors: [myBehavior], //引入其它的 behavior
 +  onLoad: function() {
 +    this.data.sharedText === 'This is a piece of data shared between pages.'
 +  }
 +})
 +</code> 
 +
 +
 +
 +==== - 组件中使用 ====
 +
 +
 +
 +
 +
 +
 +
 +
 +===== -#5 使用 Component =====
 +
 +Page 构造器适用于简单的页面。但对于复杂的页面, Page 构造器可能并不好用。
 +
 +[[https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/component.html | Component]] 构造器的主要区别是:<wrap em>方法需要放在 methods: { } 里面</wrap>
 +
 +<code javascript>
 +Component({
 +  data: {
 +    text: "This is page data."
 +  },
 +  methods: {
 +    onLoad: function(options) {
 +      // 页面创建时执行
 +    },
 +    onPullDownRefresh: function() {
 +      // 下拉刷新时执行
 +    },
 +    // 事件响应函数
 +    viewTap: function() {
 +      // ...
 +    }
 +  }
 +})
 +<code>
 +
mina/page_function.1598251030.txt.gz · 最后更改: 2020/08/24 14:37 由 sabertoy