등록 페이지


Page


Page() 함수는 페이지를 등록하는 데 사용됩니다. 페이지의 초기 데이터, 수명주기 기능, 이벤트 처리 기능 등을 지정하는 개체 매개변수를 허용합니다.

Page()函数用来注册一个页面。接受一个object参数,其指定页面的初始数据、生命周期函数、事件处理函数等。

object参数说明:

QQ截图20170208095619.png

示例代码:


//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onShow: function() {
    // Do something when page show.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down.
  },
  onReachBottom: function() {
    // Do something when page reach bottom.
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    })
  },
  customData: {
    hi: 'MINA'
  }
})

初始化数据

初始化数据将作为页面的第一次渲染。data将会以JSON的形式由逻辑层传至渲染层,所以其数据必须是可以转成JSON的格式:字符串,数字,布尔值,对象,数组。

渲染层可以通过WXML对数据进行绑定。

示例代码:

<view>{{text}}</view>
<view>{{array[0].msg}}</view>
Page({
  data: {
    text: 'init data',
    array: [{msg: '1'}, {msg: '2'}]
  }
})

生命周期函数

  • onLoad: 页面加载

    • 一个页面只会调用一次。
    • 接收页面参数可以获取wx.navigateTowx.redirectTo<navigator/>中的 query。
  • onShow: 页面显示

    • 每次打开页面都会调用一次。
  • onReady: 页面初次渲染完成

    • 一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
    • 对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。详见生命周期
  • onHide: 页面隐藏

    • navigateTo或底部tab切换时调用。
  • onUnload: 页面卸载

    • redirectTonavigateBack的时候调用。

页面相关事件处理函数

  • onPullDownRefresh: 下拉刷新
    • 监听用户下拉刷新事件。
    • 需要在configwindow选项中开启enablePullDownRefresh
    • 当处理完数据刷新后,wx.stopPullDownRefresh개체 매개변수 설명:

    • QQ 스크린샷 20170208095619.png

    샘플 코드:


  • <view bindtap="viewTap"> click me </view>

    초기화 데이터

초기화 데이터는 페이지의 첫 번째 렌더링으로 사용됩니다. 데이터는 JSON 형식으로 논리 레이어에서 렌더링 레이어로 전송되므로 데이터는 JSON으로 변환할 수 있는 형식(문자열, 숫자, 부울 값, 개체, 배열)이어야 합니다.

🎜렌더링 레이어는 WXML을 통해 데이터를 바인딩할 수 있습니다.

🎜샘플 코드:

Page({
  viewTap: function() { 
     console.log('view tap')
  }
})
<!--index.wxml-->
<view>{{text}}</view>
<button bindtap="changeText"> Change normal data </button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray"> Change Array data </button>
<view>{{obj.text}}</view>
<button bindtap="changeItemInObject"> Change Object data </button>
<view>{{newField.text}}</view>
<button bindtap="addNewField"> Add new data </button>

수명주기 기능

  • 🎜onLoad: 페이지 로드 중

    • 페이지는 한 번만 호출됩니다. 🎜
    • 수신 페이지 매개변수는 wx.navigateTo, wx.redirectTo에서 쿼리를 얻을 수 있습니다. 🎜🎜🎜
    • 🎜onShow: 페이지 표시

      • 페이지가 열릴 때마다 한 번씩 호출됩니다. 🎜🎜🎜
      • 🎜onReady: 페이지의 초기 렌더링이 완료되었습니다.

        • 페이지는 한 번만 호출됩니다. 즉, 페이지가 준비되었으며 뷰 레이어와 상호작용할 수 있습니다. 🎜
        • wx.setNavigationBarTitle과 같은 인터페이스 설정은 onReady 이후에 설정해야 합니다. 자세한 내용은 수명 주기를 참조하세요 🎜🎜🎜
        • 🎜onHide: 페이지 숨김

          • navigateTo 또는 하단 전환 시 호출됩니다. 🎜🎜🎜
          • 🎜onUnload: 페이지 언로드

            • redirectTo 또는 navigateBack 시 호출됩니다. 🎜🎜🎜🎜

              페이지 관련 이벤트 처리 기능

              • onPullDownRefresh: 풀다운 새로 고침
                • 사용자 풀다운 새로 고침 이벤트를 수신합니다. 🎜
                • configwindow 옵션에서 enablePullDownRefresh를 활성화해야 합니다. 🎜
                • 데이터 새로고침을 처리한 후 wx.stopPullDownRefresh는 현재 페이지의 풀다운 새로고침을 중지할 수 있습니다. 🎜🎜🎜🎜🎜

                  이벤트 처리 기능


                  초기화 데이터 및 수명 주기 기능 외에도 페이지에서는 이벤트 처리 기능이라는 몇 가지 특수 기능을 정의할 수도 있습니다. 렌더링 레이어에서는 트리거 이벤트에 도달하면 페이지에 정의된 이벤트 처리 기능이 실행되는 이벤트 바인딩을 추가할 수 있습니다.

                  샘플 코드:

                  //index.js
                  Page({
                    data: {
                      text: 'init data',
                      array: [{text: 'init data'}],
                      object: {
                        text: 'init data'
                      }
                    },
                    changeText: function() {
                      // this.data.text = 'changed data'  // bad, it can not work
                      this.setData({
                        text: 'changed data'
                      })
                    },
                    changeItemInArray: function() {
                      // you can use this way to modify a danamic data path
                      var changedData = {}
                      var index = 0
                      changedData['array[' + index + '].text'] = 'changed data'
                      this.setData(changedData)
                    },
                    changeItemInObject: function(){
                      this.setData({
                        'object.text': 'changed data'
                      });
                    },
                    addNewField: function() {
                      this.setData({
                        'newField.text': 'new data'
                      })
                    }
                  })
                  rrreee

                  Page.prototype.setData()


                  setData 함수는 로직 레이어에서 뷰 레이어로 데이터를 전송하는 동시에 해당 this.data 값을 변경하는 데 사용됩니다. setData函数用于将数据从逻辑层发送到视图层,同时改变对应的this.data的值

                  注意:

                  1. 直接修改this.data无效,无法改变页面的状态,还会造成数据不一致。
                  2. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据

                  setData()参数格式


                  接受一个对象,以key,value的形式表示将this.data中的key对应的值改变成value。

                  其中key可以非常灵活,以数据路径的形式给出,如array[2].messagea.b.c.d,并且不需要在this.data中预先定义。

                  示例代码:

                  rrreeerrreee

                  getCurrentPages()


                  getCurrentPages()

                  참고:

                  1. this.data를 직접 수정하는 것은 유효하지 않으며, 페이지 상태를 변경할 수 없으며, 데이터 불일치가 발생합니다.

                  2. 한 번에 설정되는 데이터는 1024kB를 초과할 수 없습니다. 한 번에 너무 많은 데이터를 설정하지 않도록 하세요

                    .

                  setData() 매개변수 형식

                  객체를 받아들이고 this.data를 키와 값의 형태로 표현합니다. 키 입력에 해당하는 값이 value로 변경됩니다. QQ截图20170208095642.png키는 매우 유연하며 array[2].message, a.b.c.d 및 this.data의 사전 정의에 있을 필요는 없습니다.

                  샘플 코드:

                  rrreeerrreee

                  getCurrentPages()


                  # 🎜 🎜 #getCurrentPages() 함수는 현재 페이지 스택의 인스턴스를 가져오는 데 사용되며, 스택 순서대로 배열 형태로 제공됩니다. 첫 번째 요소는 홈 페이지이고, 마지막 요소는 현재 페이지입니다.

                  3.png

                  참고: 페이지 스택을 수정하려고 시도하지 마세요. 라우팅 및 페이지 상태 오류가 발생할 수 있습니다.

                  페이지 스택

                  프레임워크는 현재 모든 페이지를 스택 형식으로 유지합니다. 경로 전환이 발생하면 페이지 스택은 다음과 같이 작동합니다. 다음 내용 당장은 완전히 이해되지만 나중에 도움이 될 것입니다.

                  라이프 사이클 기능QQ截图20170208095659.png

                  다음 그림은 페이지 인스턴스의 라이프 사이클을 보여줍니다

                  #🎜🎜##🎜🎜# #🎜 🎜##🎜🎜#페이지 라우팅#🎜🎜##🎜🎜#미니 프로그램에서 모든 페이지의 라우팅은 프레임워크에서 관리됩니다. 라우팅 트리거 방법과 페이지 수명 주기 기능은 다음과 같습니다. 🎜🎜##🎜🎜 ##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Tab은 해당 수명 주기를 전환합니다(A 및 B 페이지는 Tabbar 페이지이고 C는 A 페이지에서 열린 페이지, D 페이지는 C 페이지에서 열린 페이지입니다(예: #🎜🎜#)

                  QQ截图20170208095715.png

                  Bug & Tip

                  1. bug: iOS/Android 6.3.30, 처음 페이지에 들어갈 때, 만약 페이지가 하나의 화면으로 가득 차지 않습니다. onReachBottom이 트리거됩니다. 사용자가 적극적으로 끌어올 때만 트리거되어야 합니다. bug: iOS/Android 6.3.30, 首次进入页面,如果页面不满一屏时会触发 onReachBottom ,应为只有用户主动上拉才触发;
                  2. bug: iOS/Android 6.3.30bug: iOS/Android 6.3 .30, 손가락 풀업, onReachBottom은 여러 번 트리거되며 풀업이어야 하며 한 번만 트리거됩니다.          
                  🎜