MUI框架-10-MUI 資料互動-跳轉詳情頁面
MUI框架-10-MUI 資料互動-跳轉詳情頁面
- 上一篇介紹瞭如何實現資料互動,給別人的 API 傳送 ajax 請求,我們得到資料,再使用 art-template 模板引擎拼接 HTML,最終實現實現資料互動,如果還沒有接觸,請先學習:ofollow,noindex" target="_blank">MUI框架-09-MUI 與後臺資料互動
- 本篇介紹 MUI 事件管理,實現點選新聞列表跳轉詳情頁的效果
-
放上一張圖:
- 官方文件:MUI 事件管理
MUI 事件管理
- 事件繫結:MUI 的事件繫結,除了可以使用addEventListener()方法監聽某個特定元素上的事件外, 也可以使用.on()方法實現批量元素的事件繫結
-
我們先看一下官方文件例項:
- 點選新聞列表,獲取當前列表項的id,並將該id傳給新聞詳情頁面,然後開啟新聞詳情頁面
- 這裡 mui,前面是一個 id 選擇器,下面一個 on 事件函式
mui(".mui-table-view").on('tap','.mui-table-view-cell',function(){ //獲取id var id = this.getAttribute("id"); //傳值給詳情頁面,通知載入新資料 mui.fire(detail,'getDetail',{id:id}); //開啟新聞詳情 mui.openWindow({ id:'detail', url:'detail.html' }); })
專案搭建
- 因為我們這個最好是跟著我的 文章從開始看,因為後面的文章 需要前面的基礎
- 請先檢視:MUI框架-09-MUI 與後臺資料互動
-
先按照下面目錄,建好專案:
原始碼檔案:
- 因為程式碼比較複雜,分開講太亂,大家可以拷貝,詳解寫在註釋,
-
1.首先需要自己下載只有 template-web.js 檔案,獲取方法:
- 1.官網下載:http://aui.github.io/art-template/zh-cn/index.html
- 2.csdn下載:https://download.csdn.net/download/qq_40147863/10689407
-
3.如果你會用 npm 包管理器,那麼建議新建一個資料夾,因為我們只需要一個 template -web.js 檔案,我們有很多都不需要,使用如下程式碼:
npm install art-template --save
-
然後按下面路徑找到 template-web.js :
- 2.拷貝 index.html 程式碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title> <script src="js/mui.min.js"></script> <link href="css/mui.min.css" rel="stylesheet" /> <link rel="stylesheet" type="text/css" href="css/index.css" /> </head> <body> <!--頭部資訊--> <header class="mui-bar mui-bar-nav title"> <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a> <h1 class="mui-title">知乎日報</h1> </header> <script type="text/javascript" charset="utf-8"> mui.init({ subpages: [{ url: 'html/content.html', id: 'content.html', styles: { top: '45px', //mui標題欄預設高度為45px; bottom: '0px' //預設為0px,可不定義; } }] }); </script> <nav class="mui-bar mui-bar-tab"> <a class="mui-tab-item mui-active"> <span class="mui-icon mui-icon-home"></span> <span class="mui-tab-label">首頁</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-phone"></span> <span class="mui-tab-label">電話</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-email"></span> <span class="mui-tab-label">郵件</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-gear"></span> <span class="mui-tab-label">設定</span> </a> </nav> </body> </html>
- 3.拷貝 content.html 程式碼:
<!doctype html> <html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <link href="../css/mui.min.css" rel="stylesheet" /> </head> <body> <div class="mui-content"> <div class="mui-slider"> <div class="mui-slider-group"> <!--第一個內容區容器--> <div class="mui-slider-item"> <!-- 具體內容 --> <img src="../img/1D52F569E73F611465E9BB3656E9628B.png" /> </div> <!--第二個內容區--> <div class="mui-slider-item"> <!-- 具體內容 --> <img src="../img/8CF9B879550CD10AA9B7B58777367C7F.png" /> </div> </div> </div> <ul class="mui-table-view" id="zhihu"> </ul> </div> <script src="../js/mui.min.js"></script> <!-- 匯入 template-web.js 官網下載:http://aui.github.io/art-template/ csdn下載:https://download.csdn.net/download/qq_40147863/10689407 --> <script src="../js/template-web.js" type="text/javascript" charset="UTF-8"></script> <!-- 使用<script id="list" type="text/html"> 拼接 html --> <script id="list" type="text/html"> <!-- 迴圈語法 --> {{each stories as list}} <li class="mui-table-view-cell mui-media" id="{{list.id}}"> <a href="javascript:;"> <img class="mui-media-object mui-pull-left" src="{{list.images[0]}}"> <div class="mui-media-body"> <!-- 獲取 title --> {{list.title}} </div> </a> </li> {{/each}} </script> <script type="text/javascript"> //plusReady,用來定義載入dom後的操作 mui.plusReady(function() { //發起 ajax請求,地址使用知乎日報 api mui.ajax('https://news-at.zhihu.com/api/4/theme/11', { /* data 是引數,我們這裡不需要,我們只是從 api獲取資料 data: { username: 'username', password: 'password' }, */ dataType: 'json', //伺服器返回json格式資料 type: 'get', //HTTP請求型別 timeout: 10000, //超時時間設定為10秒; headers: { 'Content-Type': 'application/json' }, success: function(data) { //伺服器返回響應,根據響應結果,分析是否登入成功; //我們現在控制檯列印一下請求結果 //console.log(data) //然後獲取json資料中的具體值 //console.log(data.stories[0].title) //list 對應上面的 id,就是得到 拼接的 html var html = template('list', data); //把得到的 html 放到id為 zhihu 的 ul 標籤裡 document.getElementById("zhihu").innerHTML = html; //console.log(html); }, error: function(xhr, type, errorThrown) { //異常處理; console.log(type); } }); }); //網頁預載入 mui.init({ preloadPages:[{ id:'info', url:'info.html' } ] }); var detailPage = null; //新增列表項的點選事件 mui('.mui-table-view').on('tap', 'li', function(e) { var id = this.getAttribute('id'); //獲得詳情頁面 if(!detailPage){ detailPage = plus.webview.getWebviewById('info'); } //觸發詳情頁面的newsId事件 mui.fire(detailPage,'id',{ id:id }); //開啟詳情頁面 mui.openWindow({ id:'info' }); }); </script> </body> </html>
- 4.拷貝詳情頁 info.html 程式碼:
<!doctype html> <html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <link href="../css/mui.min.css" rel="stylesheet" /> </head> <body> <div class="mui-content"> <ul class="mui-table-view" id="newsinfo"></ul> <script id="lists" type="text/html"> {{body}} </script> </div> <script src="../js/mui.min.js"></script> <!-- 匯入 template-web.js 官網下載:http://aui.github.io/art-template/ csdn下載:https://download.csdn.net/download/qq_40147863/10689407 --> <script src="../js/template-web.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript"> mui.init(); //新增newId自定義事件監聽 window.addEventListener('id', function(event) { //獲得事件引數 var id = event.detail.id; //根據id向伺服器請求新聞詳情 //plusReady,用來定義載入dom後的操作 mui.plusReady(function() { //發起 ajax請求,地址使用知乎日報 api mui.ajax('https://news-at.zhihu.com/api/4/news/'+ id, { /* data 是引數,我們這裡不需要,我們只是從 api獲取資料 data: { username: 'username', password: 'password' }, */ dataType: 'json', //伺服器返回json格式資料 type: 'get', //HTTP請求型別 timeout: 10000, //超時時間設定為10秒; headers: { 'Content-Type': 'application/json' }, success: function(data) { //伺服器返回響應,根據響應結果,分析是否登入成功; //我們現在控制檯列印一下請求結果 console.log("666"); console.log(data); //然後獲取json資料中的具體值 //console.log(data.stories[0].title) //list 對應上面的 id,就是得到 拼接的 html var html = template('lists', data); //把得到的 html 放到id為 zhihu 的 ul 標籤裡 document.getElementById("newsinfo").innerHTML = data.body; //console.log(html); }, error: function(xhr, type, errorThrown) { //異常處理; console.log(type); } }); }); }); </script> </body> </html>
專案執行
- 注意:只能在真機執行,或者安卓模擬器執行
- 如果沒有安卓手機,請配置模擬器,我這裡使用的是夜神安卓模擬器,配置方法:
- 請參考:MUI框架-07-HBuilder+夜神安卓模擬器 配置
更多文章連結:MUI 框架
- 本筆記不允許任何個人和組織轉載