微信小程序開發系列五:微信小程序中如何響應用戶輸入事件

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

微信小程序開發系列教程

微信小程序開發系列一:微信小程序的申請和開發環境的搭建

微信小程序開發系列二:微信小程序的視圖設計

微信小程序開發系列三:微信小程序的調試方法

微信小程序開發系列四:微信小程序之控制器的初始化邏輯

微信小程序開發系列五:微信小程序中如何響應用戶輸入事件

通過前面四個章節的介紹,大家對微信小程序的視圖和控制器,以及微信調試器的用法已經有了一個最基本的認識了。在這個基礎上,讓我們進一步學習微信小程序控制器,掌握在小程序控制器中響應用戶輸入的方法。

這個例子很簡單,在微信小程序的視圖index.wxml里,我定義了一個按鈕,和一個文本元素。

<button bindtap="jerry_increase"> 點我加1 </button>

<text class="user-motto">{{counter}}</text>

文本元素綁定到小程序數據模型的counter字段上,是一個計數器。按鈕綁定了一個事件處理函數jerry_increase。每點擊一次按鈕,微信小程序UI上的計數器加一。

為此,首先需要在控制器index.js的data數據模型里增添一個counter字段。

然后實現button的bindtap綁定的函數jerry_increase。可以看到這個事件處理函數有一個輸入參數e:

當事件處理函數被調用時,這個輸入參數e是微信框架自動傳入到事件處理函數的。通過微信開發者工具的調試器可以看到這個參數e的明細:tap事件發生的X和Y坐標,以及事件類型tap。

我們如果從當前控制器事件處理函數執行棧向外觀察,發現它的前一層,即微信框架層的處理邏輯里,在調用事件處理函數前后分別取兩個當前的時間戳。如果時間戳之差大于1000毫秒,會執行第30365行的Reporter.slowReport。由此我們看出,微信希望開發者實現的事件處理函數要盡可能高效,執行時間不能超過1秒。在手機使用場景里,1秒的等待時間對于最終用戶來說是一個相當長的時間了。

另一個值得一提的知識點是,如果直接用JavaScript修改數據模型的值,則UI不會有任何變化。

下面是錯誤的做法:

jerry_increase: function(e){this.data.counter = this.data.counter + 1;},

下面是正確的做法:

jerry_increase: function(e){this.setData({counter: this.data.counter + 1});},

我們可以通過單步調試正確的做法來理會其中的奧妙:

可以看到this.setData里面會調用微信框架的c.default.emit函數,把最新的數據通過emit函數投遞出去。

繼續查看emit的實現,可以發現emit又調用了微信工具類wx的方法:invokeWebviewMethod。從WAService.js的內部實現,我們能發現其實微信小程序在手機上的執行實際是運行在WebView里的。

一旦WeixinJSBridge.publish.apply(WeixinJSBridge, e)這一行代碼執行完畢,UI上的計數器才被刷新。

本文介紹了如果在微信小程序里編寫JavaScript來響應button的點擊事件。

本系列的下一篇文章會介紹微信小程序的button組件提供的一些微信原生功能,比如獲取當前用戶信息等強大功能的用法。

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

轉載于:https://my.oschina.net/u/3771578/blog/2250151

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281835.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

理解Object.defineProperty的作用

Object.defineProperty 是vue中雙向綁定的基礎。vue是通過數據劫持的方式來做數據綁定的&#xff0c;最核心的方法是通過 Object.defineProperty()方法來實現對屬性的劫持&#xff0c;達到能監聽到數據的變動。要實現數據的雙向綁定&#xff0c; 當使用存取器描述屬性的特性的時…

java.lang包有哪些類_Java中Lang包的工具類有哪些

Java中Lang包的工具類有哪些發布時間&#xff1a;2020-12-08 16:15:36來源&#xff1a;億速云閱讀&#xff1a;76作者&#xff1a;Leah今天就跟大家聊聊有關Java中Lang包的工具類有哪些&#xff0c;可能很多人都不太了解&#xff0c;為了讓大家更加了解&#xff0c;小編給大家總…

直播修仙:使用.NET 的 WebView2 如何獲取請求的響應內容,以微信直播的互動直播為例...

背景近幾年直播行業快速發展&#xff0c;門檻也越來越低&#xff0c;越來越的人涌入直播大軍。不得不說&#xff0c;直播不僅帶來了更多的娛樂消遣&#xff0c;還提供了一個新型的就業方式。說起直播的類型&#xff0c;有一個非常小眾的娛樂直播&#xff0c;沒有主播&#xff0…

2017年我的閱讀書單

2017年我正在看或者已經看完的書單&#xff0c;基本上都是紙質書&#xff0c;主要是長時間閱讀也不傷眼。由于現階段的主要工作是 DevOps 和運維管理&#xff0c;所以涉及運維方面的書我沒有再細看&#xff0c;如果是工作用到的話會稍為翻閱下。主要還是看運維開發和 Python 及…

web第6次作業position

position 屬性指定了元素的定位類型。 position 屬性的五個值&#xff1a; static &#xff08;靜態定位&#xff09; HTML元素的默認值&#xff0c;即沒有定位&#xff0c;元素出現在正常的流中。 靜態定位的元素不會受到 top, bottom, left, right影響。 div.stati…

GeneralUpdate版本更新公告20221009

大家好我是juster&#xff0c;GeneralUpdate的開源項目作者。這次將發布GeneralUpdate兼容.NET MAUI和多平臺為核心的版本。經過國慶假期的打磨修復了大量開源社區開發者的提交的bug和不合理修改建議&#xff0c;重構、刪除了大量代碼和結構使用和上一個版本沒有太大變化。1.更…

實驗2 java_《Java程序設計》實驗2

1、使用java語言編程&#xff0c;從鍵盤輸入N個整數存儲到數組中&#xff0c;求數組所有元素的和、最大值和平均值。import java.util.Scanner;public class Program01{public static void main(String [] args){Scanner scanner new Scanner(System.in);System.out.println(&…

WPF遍歷當前容器中某種控件的方法

原文:WPF遍歷當前容器中某種控件的方法版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/m0_37591671/article/details/79528845 WPF遍歷當前容器中某種控件的方法 WPF遍歷當前容器中某種控件的方法1.目的&#xff1a;2.實現思…

gradle 轉 maven

1. 預備 1.1. java 環境 驗證 java -version   1.2. gradle 安裝&#xff0c; 參考&#xff0c; 這里列舉下windows下的安裝 b.1 下載包&#xff1a;https://gradle.org/releases b.2 解壓&#xff0c;例如放到D:\soft\gradle\gradle-3.5 b.3 添加到環境變量&#xff0c; 把D…

詳細的DedeCMS(織夢)目錄權限安全設置教程

一、目錄權限根據統計&#xff0c;絕大部分網站的攻擊都在根目錄開始的&#xff0c;因此&#xff0c;欄目目錄不能設置在根目錄。DEDECMS部署完成后&#xff0c;重點目錄設置如下&#xff1a;1&#xff09;將install刪除。2) data、templets、uploads、a或html目錄&#xff0c;…

java證書的安裝_Java 第三方證書安裝

1、進入dos命令行&#xff0c;進入目錄C:\Program Files (x86)\Java\jre6\lib\security&#xff0c;2、導入命令&#xff1a; keytool -import -keystore "C:\Program Files (x86)\Java\jre6\lib\security\cacerts" -storepass changeit -keypass changeit -alias em…

善用Object.defineProperty巧妙找到修改某個變量的準確代碼位置

2019獨角獸企業重金招聘Python工程師標準>>> 我今天的工作又遇到一個難題。前端UI右下角這個按鈕被設置為"禁用(disabled)"狀態。 這個按鈕的可用狀態由屬性enabled控制。我通過調試發現&#xff0c;一旦下圖第88行代碼執行完畢之后&#xff0c;這個按鈕的…

緩沖運動之框架開始一級簡單框架實例

***********************緩沖運動【框架開始】-1.html********************************************* <!DOCTYPE html> <html><head lang"en"><meta charset"UTF-8"><title></title><style type"text/css&qu…

將字符串分割為指定長度的子字符串

將一個字符串從左至右&#xff0c;分割成指定長度的子字符串&#xff08;注&#xff1a;最后一個子字符串的長度不一定等于指定的長度&#xff09; 1 #include <stdio.h>2 #include <string.h>3 4 #define STR_LENGTH 5 //分割之后每個字符串的長度&#xff08;最…

使用 C# 開發的輕量級開源數據庫 LiteDB

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具或組件&#xff0c;希望對您有用&#xff01;簡介 LiteDB 是一個小型、快速、輕量級的 .NET NoSQL 嵌入式數據庫&#xff0c;也就是我們常說的 K/V 數據庫&#xff0c;完全用 C# …

微信小程序仿微信SlideView組件slide-view

微信小程序仿微信SlideView組件。 使用 1、安裝 slide-view 從小程序基礎庫版本 2.2.1 或以上、及開發者工具 1.02.1808300 或以上開始&#xff0c;小程序支持使用 npm 安裝第三方包。 npm install --save miniprogram-slide-view2、在需要使用 slide-view 的頁面 page.json 中…

hibernate 環境搭建測試

對于hibernate的介紹&#xff0c;網絡上一搜一堆&#xff0c;恐怕我寫的也沒前輩總結的好。這個博主總結的十分好,方便大家欣賞 http://blog.csdn.net/liujiahan629629/article/details/21442607 真正要掌握&#xff0c;還得需要自己動手&#xff0c;才能豐衣足食。所需jar包j…

jQuary的相關動畫效果

第一種&#xff1a;該方法隱藏所有 <p> 元素&#xff1a; <html> <head> <script type"text/javascript" src"jquery.js"></script> <script type"text/javascript"> $(document).ready(function(){ $(&quo…

C# WPF 中使用 MahApps.Metro.IconPacks 提供的圖標

概述我們在桌面應用程序開發時經常會用到很多圖標&#xff0c;時常我是在阿里矢量圖庫下載&#xff1a;https://www.iconfont.cn/&#xff0c;然后存放多項目中去引用&#xff0c;不過這樣操作起來有點繁瑣&#xff0c;這節我們介紹一個更加便捷的方式.用法概述Wpf 圖標管理工具…

rails generator

generate 查找順序 rails/generators/initializer/initializer_generator.rb generators/initializer/initializer_generator.rbrails/generators/initializer_generator.rbgenerators/initializer_generator.rblib/templates/rails/helper/helper.rbcustomize your scaffold t…