zoukankan      html  css  js  c++  java
  • MUI框架-10-MUI 数据交互-跳转详情页面

    MUI框架-10-MUI 数据交互-跳转详情页面

    • 上一篇介绍了如何实现数据交互,给别人的 API 发送 ajax 请求,我们得到数据,再使用 art-template 模板引擎拼接 HTML,最终实现实现数据交互,如果还没有接触,请先学习: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 文件,获取方法:

      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 框架


    - 本笔记不允许任何个人和组织转载
  • 相关阅读:
    2020软件工程最后一次作业
    常用的10种算法

    赫夫曼编码
    哈希表(散列)
    查找算法
    排序算法
    递归

    软件工程最后一次作业
  • 原文地址:https://www.cnblogs.com/xpwi/p/9715921.html
Copyright © 2011-2022 走看看