国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット ミニプログラム開発 ミニ プログラムの各ページが確実にログインしていることを確認(rèn)する方法についての簡(jiǎn)単な説明

ミニ プログラムの各ページが確実にログインしていることを確認(rèn)する方法についての簡(jiǎn)単な説明

Dec 27, 2021 am 10:23 AM
アプレット

WeChat アプレットはどのようにしてすべてのページがログインしていることを確認(rèn)しますか?この記事では、すべてのページに確実にログインするためのミニプログラムの方法を紹介します。お役に立てば幸いです。

ミニ プログラムの各ページが確実にログインしていることを確認(rèn)する方法についての簡(jiǎn)単な説明

WeChat アプレットには、ホームページ、個(gè)人ページ、いくつかのリスト ページ、詳細(xì)ページなどがあり、これらのページのほとんどは共有できます。共有ページが別のユーザーによって開かれた場(chǎng)合、このページはユーザーがログインしていることをどのように確認(rèn)しますか?

インターネット上には、リクエストのカプセル化にインターセプトを追加するソリューションが多數(shù)あります。トークンがない場(chǎng)合は、まずログイン リクエストを呼び出してトークンを取得してから続行します。 このソリューションには何も問(wèn)題はありません。1 つの點(diǎn)に注意してください。ページ上で複數(shù)のリクエストが同時(shí)にトリガーされた場(chǎng)合、すべてのリクエストがインターセプトされた後、それらは配列に配置されます。トークンの取得に成功したら、単に一度に 1 つのリクエストを配列します。

しかし、この要件は少し複雑です。たとえば、チェーンのコンビニ アプレットでは、ほとんどのページに店舗が必要です (現(xiàn)在の店舗の商品の在庫(kù)、価格などをベースに取得する必要があるため)このストアは現(xiàn)在のストアをベースにしています。位置情報(bào)はバックグラウンドインターフェイスを呼び出すことで取得します。このとき、リクエストにカプセル化するのは面倒です。

解決策

まず、ログイン、位置の取得、ページリクエストが非同期であることに気付きました。ページリクエスト ログインして位置情報(bào)を取得した後ですが、ページごとに書き直すとメンテナンス性が悪すぎます。したがって、これを行う方法を抽出できます。 したがって、コードは次のようになります。

const app = getApp()
Page({
  data: {
    logs: []
  },
  onLoad() {
    app.commonLogin(()=>{
        // 處理頁(yè)頁(yè)面請(qǐng)求
    })
  }
})

これを?qū)g行すると問(wèn)題は解決するように見えますが、ページごとの onShareAppMessage の統(tǒng)一処理など、さらにやりたい場(chǎng)合はもう一度考えてください。すべてのページにもう一度書きたくないのですが、さらに自分で各ページにウォッチを?qū)g裝したいのですが、どうすればよいですか?

さらなる解決策

WeChat アプレット、各ページが Page() であることがわかり、このページに追加することができます。外側(cè)のシェルのレイヤーを使用すると、このページを置き換える MyPage を作成できます。これ以上の手間をかけずに、コードを次に示します:

tool.js 関連コード

/**
   * 處理合并參數(shù)
   */
  handlePageParamMerge(arg) {
    let numargs = arg.length; // 獲取被傳遞參數(shù)的數(shù)值。
    let data = {}
    let page = {}
    for (let ix in arg) {
      let item = arg[ix]
      if (item.data && typeof (item.data) === 'object') {
        data = Object.assign(data, item.data)
      }
      if (item.methods && typeof (item.methods) === 'object') {
        page = Object.assign(page, item.methods)
      } else {
        page = Object.assign(page, item)
      }
    }
    page.data = data
    return page
  }

  /***
   * 合并頁(yè)面方法以及數(shù)據(jù), 兼容 {data:{}, methods: {}} 或 {data:{}, a:{}, b:{}}
   */
  mergePage() {
    return this.handlePageParamMerge(arguments)
  }

  /**
   * 處理組件參數(shù)合并
   */
  handleCompParamMerge(arg) {
    let numargs = arg.length; // 獲取被傳遞參數(shù)的數(shù)值。
    let data = {}
    let options = {}
    let properties = {}
    let methods = {}
    let comp = {}
    for (let ix in arg) {
      let item = arg[ix]
      // 合并組件的初始數(shù)據(jù)
      if (item.data && typeof (item.data) === 'object') {
        data = Object.assign(data, item.data)
      }
      // 合并組件的屬性列表
      if (item.properties && typeof (item.properties) === 'object') {
        properties = Object.assign(properties, item.properties)
      }
      // 合組件的方法列表
      if (item.methods && typeof (item.methods) === 'object') {
        methods = Object.assign(methods, item.methods)
      }
      if (item.options && typeof (item.options) === 'object') {
        options = Object.assign(options, item.options)
      }
      comp = Object.assign(comp, item)
    }
    comp.data = data
    comp.options = options
    comp.properties = properties
    comp.methods = methods
    return comp
  }

  /**
   * 組件混合 {properties: {}, options: {}, data:{}, methods: {}}
   */
  mergeComponent() {
    return this.handleCompParamMerge(arguments)
  }

  /***
   * 合成帶watch的頁(yè)面
   */
  newPage() {
    let options = this.handlePageParamMerge(arguments)
    let that = this
    let app = getApp()

    //增加全局點(diǎn)擊登錄判斷
    if (!options.publicCheckLogin){
      options.publicCheckLogin = function (e) {
        let pages = getCurrentPages()
        let page = pages[pages.length - 1]
        let dataset = e.currentTarget.dataset
        let callback = null

        //獲取回調(diào)方法
        if (dataset.callback && typeof (page[dataset.callback]) === "function"){
          callback = page[dataset.callback]
        }
        // console.log('callback>>', callback, app.isRegister())
        //判斷是否登錄
        if (callback && app.isRegister()){
          callback(e)
        }
        else{
          wx.navigateTo({
            url: '/pages/login/login'
          })
        }
      }
    }

    const { onLoad } = options
    options.onLoad = function (arg) {
      options.watch && that.setWatcher(this)
      onLoad && onLoad.call(this, arg)
    }

    const { onShow } = options
    options.onShow = function (arg) {
      if (options.data.noAutoLogin || app.isRegister()) {
        onShow && onShow.call(this, arg)
        //頁(yè)面埋點(diǎn)
        app.ga({})
      }
      else {
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
    }

    return Page(options)
  }

  /**
   * 合成帶watch等的組件
   */
  newComponent() {
    let options = this.handleCompParamMerge(arguments)
    let that = this
    const { ready } = options
    options.ready = function (arg) {
      options.watch && that.setWatcher(this)
      ready && ready.call(this, arg)
    }
    return Component(options)
  }

  /**
    * 設(shè)置監(jiān)聽器
    */
  setWatcher(page) {
    let data = page.data;
    let watch = page.watch;
    Object.keys(watch).forEach(v => {
      let key = v.split('.'); // 將watch中的屬性以'.'切分成數(shù)組
      let nowData = data; // 將data賦值給nowData
      for (let i = 0; i < key.length - 1; i++) { // 遍歷key數(shù)組的元素,除了最后一個(gè)!
        nowData = nowData[key[i]]; // 將nowData指向它的key屬性對(duì)象
      }

      let lastKey = key[key.length - 1];
      // 假設(shè)key===&#39;my.name&#39;,此時(shí)nowData===data[&#39;my&#39;]===data.my,lastKey===&#39;name&#39;
      let watchFun = watch[v].handler || watch[v]; // 兼容帶handler和不帶handler的兩種寫法
      let deep = watch[v].deep; // 若未設(shè)置deep,則為undefine
      this.observe(nowData, lastKey, watchFun, deep, page); // 監(jiān)聽nowData對(duì)象的lastKey
    })
  }

  /**
   * 監(jiān)聽屬性 并執(zhí)行監(jiān)聽函數(shù)
   */
  observe(obj, key, watchFun, deep, page) {
    var val = obj[key];
    // 判斷deep是true 且 val不能為空 且 typeof val===&#39;object&#39;(數(shù)組內(nèi)數(shù)值變化也需要深度監(jiān)聽)
    if (deep && val != null && typeof val === &#39;object&#39;) {
      Object.keys(val).forEach(childKey => { // 遍歷val對(duì)象下的每一個(gè)key
        this.observe(val, childKey, watchFun, deep, page); // 遞歸調(diào)用監(jiān)聽函數(shù)
      })
    }
    var that = this;
    Object.defineProperty(obj, key, {
      configurable: true,
      enumerable: true,
      set: function (value) {
        if (val === value) {
          return
        }
        // 用page對(duì)象調(diào)用,改變函數(shù)內(nèi)this指向,以便this.data訪問(wèn)data內(nèi)的屬性值
        watchFun.call(page, value, val); // value是新值,val是舊值
        val = value;
        if (deep) { // 若是深度監(jiān)聽,重新監(jiān)聽該對(duì)象,以便監(jiān)聽其屬性。
          that.observe(obj, key, watchFun, deep, page);
        }
      },
      get: function () {
        return val;
      }
    })
  }

ページ コード:

app.tool.newPage({
  data: {
    // noAutoLogin: false
  },
  onShow: function () {
    // 在這里寫頁(yè)面請(qǐng)求邏輯
  }
}

最後に

#コードは長(zhǎng)い間オンラインで実行されており、ツールの newPage パッケージを使用してニーズに応じて追加できます。つまり、私はアイデアを提供するためにここにいます。もっと良いアイデアがあれば、ぜひ共有してください。

[関連する學(xué)習(xí)の推奨事項(xiàng):

小さなプログラム開発チュートリアル]

以上がミニ プログラムの各ページが確実にログインしていることを確認(rèn)する方法についての簡(jiǎn)単な説明の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python を使用して WeChat アプレットを開発する Python を使用して WeChat アプレットを開発する Jun 17, 2023 pm 06:34 PM

モバイル インターネット技術(shù)とスマートフォンの普及により、WeChat は人々の生活に欠かせないアプリケーションになりました。 WeChat ミニ プログラムを使用すると、アプリケーションをダウンロードしてインストールすることなく、ミニ プログラムを直接使用して、いくつかの簡(jiǎn)単なニーズを解決できます。この記事では、Python を使用して WeChat アプレットを開発する方法を紹介します。 1. 準(zhǔn)備 Python を使用して WeChat アプレットを開発する前に、関連する Python ライブラリをインストールする必要があります。ここでは、wxpy と itchat の 2 つのライブラリを使用することをお?jiǎng)幛幛筏蓼埂?wxpy は WeChat マシンです

WeChat ミニ プログラムにカードめくり効果を?qū)g裝する WeChat ミニ プログラムにカードめくり効果を?qū)g裝する Nov 21, 2023 am 10:55 AM

WeChat ミニ プログラムでのカードめくり効果の実裝 WeChat ミニ プログラムでは、カードめくり効果の実裝は、ユーザー エクスペリエンスとインターフェイス インタラクションの魅力を向上させることができる一般的なアニメーション効果です。以下では、WeChat アプレットでカードめくりの特殊効果を?qū)g裝する方法と、関連するコード例を詳しく紹介します。まず、ミニ プログラムのページ レイアウト ファイルに 2 つのカード要素を定義する必要があります。1 つは前面のコンテンツを表示するため、もう 1 つは背面のコンテンツを表示するためです。具體的なサンプル コードは次のとおりです: &lt;!--index.wxml- ->&l

アリペイ、希少文字ライブラリを収集?補(bǔ)完する「漢字拾い-希少文字」ミニプログラムを開始 アリペイ、希少文字ライブラリを収集?補(bǔ)完する「漢字拾い-希少文字」ミニプログラムを開始 Oct 31, 2023 pm 09:25 PM

10月31日の當(dāng)サイトのニュースによると、今年5月27日、アント?グループは「漢字拾いプロジェクト」の立ち上げを発表し、最近新たな進(jìn)展を迎えた:アリペイが「漢字拾い-珍しい文字」ミニプログラムを開始協(xié)會(huì)からコレクションを収集する レア文字は、レア文字ライブラリを補(bǔ)完し、アリペイでのレア文字入力方法の改善に役立つように、レア文字に異なる入力エクスペリエンスを提供します?,F(xiàn)在、ユーザーは「漢字ピックアップ」「珍文字」などのキーワードで検索することで「珍文字」アプレットに入ることができる。ミニプログラムでは、ユーザーがシステムで認(rèn)識(shí)?入力されなかった珍しい文字の畫像を送信し、確認(rèn)後、Alipay のエンジニアがフォントライブラリに追加エントリを作成します。當(dāng)サイトでは、発音が不明瞭な珍しい単語(yǔ)を?qū)澫螭趣筏孔钚陇螀g語(yǔ)分割入力方法をミニプログラムで體験できることに注目しました。ユーザー解體

小さなプログラムでも反応できますか? 小さなプログラムでも反応できますか? Dec 29, 2022 am 11:06 AM

ミニプログラムはreactを利用することができます 使い方: 1. 「react-reconciler」に基づいてレンダラーを?qū)g裝し、DSLを生成します; 2. DSLを解析してレンダリングするためのミニプログラムコンポーネントを作成します; 3. npmをインストールし、開発者ビルドを?qū)g行しますツール內(nèi)の npm; 4. パッケージを獨(dú)自のページに導(dǎo)入し、API を使用して開発を完了します。

uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)する方法 uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)する方法 Oct 20, 2023 pm 02:12 PM

uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)するには、具體的なコード例が必要ですが、近年、モバイル インターネットの発展とスマートフォンの普及に伴い、ミニ プログラムと H5 は不可欠なアプリケーション形式となっています。クロスプラットフォーム開発フレームワークとして、uniapp は一連のコードに基づいて小規(guī)模プログラムと H5 間の変換を迅速に実現(xiàn)し、開発効率を大幅に向上させます。この記事では、uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)する方法と、具體的なコード例を紹介します。 1. uniapp uniaの紹介

ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を説明します (詳細(xì)なアイデア付き) ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を説明します (詳細(xì)なアイデア付き) Nov 04, 2022 pm 04:53 PM

この記事では、WeChat ミニ プログラムに関するいくつかの関連事項(xiàng)を紹介します。主に、ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を紹介します。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

Python で簡(jiǎn)単なチャット プログラムを作成するためのチュートリアル Python で簡(jiǎn)単なチャット プログラムを作成するためのチュートリアル May 08, 2023 pm 06:37 PM

実裝アイデア: チャット ルームのさまざまな機(jī)能を処理するために、スレッドのサーバー側(cè)を確立します。x02 クライアントの確立はサーバーよりもはるかに簡(jiǎn)単です。クライアントの機(jī)能はメッセージの送受信と、特定の文字を特定の規(guī)則に従って入力するため、クライアント側(cè)では、メッセージ受信専用とメッセージ送信専用の 2 つのスレッドを使用するだけで、さまざまな機(jī)能を使用できます。使用しないでください。

PHP とミニプログラムを使用した地理的位置特定と地図表示 PHP とミニプログラムを使用した地理的位置特定と地図表示 Jul 04, 2023 pm 04:01 PM

PHP およびミニ プログラムの地理位置測(cè)位と地図表示 地理位置測(cè)位と地図表示は、現(xiàn)代のテクノロジーにおいて必要な機(jī)能の 1 つになっています。モバイルデバイスの普及に伴い、測(cè)位と地図表示に対する人々の需要も高まっています。開発プロセスでは、PHP とアプレットの 2 つのテクノロジーが一般的に選択されます。この記事では、PHP およびミニ プログラムでの地理的位置の測(cè)位と地図表示の実裝方法を紹介し、対応するコード例を添付します。 1. PHP での地理位置情報(bào) PHP では、サードパーティの地理位置情報(bào)を使用できます。

See all articles