網站首頁 編程語言 正文
要正確展示文章詳情頁面的內容,首先需要將文章的id號由post頁面傳遞到post-detail頁面,這樣,post-detail頁面才能知曉它要顯示哪篇文章。這涉及頁面間的參數傳遞與通信。目前,在MNA框架中有以下幾種參數傳遞方式:
- 使用全局變量(關于全局變量,本書后面的章節中會講到);
- 使用緩存;
- 通過頁面導航url的query參數傳遞。
基本上參數的傳遞只有以上3種方式,其他的比如像事件信號的傳參方式(一個頁面emit
發送信號,一個頁面on監聽信號,這種在AngularJS里很常見的傳參方式,小程序是不能天
然支持的),其實都是這些基本思路的變種。
開發者在學習完緩存后應該很容易想到。其實,使用緩存數據庫存儲data,js初始化數據,又在post.js中讀取緩存數據,這其實就是頁面間的參數傳遞。仔細想想,是不是這樣?
1、2兩種都涉及全局變量,筆者個人不推薦這種污染全局的傳參方式,而且我們的需求僅僅是兩個頁面間傳遞參數,完全不需要干擾全局。所以,選用方法3來做頁面間的參數傳遞。
要想在post,js中獲取到postId,就必須知道當前點擊的文章是哪一篇文章。我們首先將postld綁定到每一篇文章的wxml中,使postId成為文章wxml的一個屬性。注意,postId已經定義在了data.js中了。
1、綁定postId
<block wx:for="{{ postList }}" wx:for-item="item" wx:for-index="idx">
<!-- 不要再block標簽或tempale標簽上綁定事件!! -->
<view catchtap="onTapToDetail" data-post-id="{{ item.postId }}">
<template is="postItemTpl" data="{{ ...item }}" />
</view>
</block>
2、在post.js中添加如下代碼:?
onTapToDetail:function(event){
// 下面這行代碼獲取postId:
var postId=event.currentTarget.dataset.postId;
console.log(postId);
wx.navigateTo({
url: './post-detail/post-detail?id=' + postId,
});
},
控制臺顯示postId,說明id確實已經傳過來了。?
每篇文章的id都被綁定在了該文章的view容器上,剩下的工作就是,如何獲取當前文章的id了。
上述代碼中,我們通過event.currentTarget.dataset.postId,這段代碼成功地拿到了當前文章
的postId。
event事件對象是由MNA框架在調用onTapToDetail函數時傳遞的參數。在event事件對
象中,有一個currentTarget代表事件綁定的當前組件。
重點是dataset對象,dataset對象里包含當前組件中所有屬性名以data-開頭的自定義屬性
值。我們在代碼清單6-5中的view上綁定了data-post-id,所以通過dataset.postId將可以拿到
當前組件的postId。.
組件自定義屬性名有以下規則:
- 必須以data-開頭。
- 多個單詞由連字符“”鏈接。
- 單詞中最好不要有大寫字母,如果有大寫字母,除單詞第一個字母外,其余大寫字母
將被轉化成小寫。 - 在js中獲取自定義屬性值時,多個單詞將被轉化駝峰命名。
舉例子:
組件的自定義數據 | dataset中變量名 |
data-post | dataset.post |
data-post-id | dataset.postId |
data-pOST-ID | dataset.postId |
data-postId | dataset.postId |
?我們只需要以這種格式傳給頁面(url的query參數)就好了:
url: './post-detail/post-detail?id=' + postId,
原文鏈接:https://blog.csdn.net/m0_59259076/article/details/123575924
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-10-23 C#中new操作符的工作機制_C#教程
- 2021-09-09 Linux下NTP服務器配置詳細過程_Linux
- 2023-01-15 解讀keras中的正則化(regularization)問題_python
- 2022-07-14 Android?Studio使用自定義對話框效果_Android
- 2023-03-17 一文掌握git?push命令_相關技巧
- 2022-12-09 C++筆記-設置cout輸出數據的寬度和填充方式_C 語言
- 2022-07-21 Hadoop-HDFS分布式文件系統基礎
- 2022-06-07 關于python調用c++動態庫dll時的參數傳遞問題_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支