vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页
设置代理,避免出现跨域问题

/*设置代理,避免出现跨域问题*/
proxyTable: {
'/api':{
target: 'https://www.oschina.net/action/apiv2/',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
api/index.js 接口配置
/**
* 引入 异步请求API
*/
import "whatwg-fetch" const host_addr='http://192.168.1.110:8081/' /**
* 获取资讯列表
* 解决跨域问题: 用 '/api' 代替 host_addr
*/
export let getList = async (page, tag) => {
let response = await fetch('/api' + `news_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
method: 'GET',
mode: 'cors'
}).catch((error) => {
console.log(error)
})
return await response.json().catch((error) => {
console.log(error)
})
} /**
* 获取资讯详情
*/
export let getNewsDetail = async (id) => {
let response = await fetch('/api' + `news_detail?id=${id}`, {
method: 'GET',
mode: 'cors'
}).catch((error) => {
console.log(error)
})
return await response.json().catch((error) => {
console.log(error)
})
} /**
* 获取博客列表
*/
export let getBlogList = async (page, tag) => {
let response = await fetch(host_addr + `blog_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
method: 'GET',
mode: 'cors'
}).catch((error) => {
console.log(error)
})
return await response.json().catch((error) => {
console.log(error)
})
} /**
* 获取问答列表
*/
export let getQuestionList = async (page, tag) => {
let response = await fetch(host_addr + `question_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
method: 'GET',
mode: 'cors'
}).catch((error) => {
console.log(error)
})
return await response.json().catch((error) => {
console.log(error)
})
} /**
* 获取活动列表
*/
export let getEventList = async (page, tag) => {
let response = await fetch(host_addr + `event_list?pageIndex=${page}&pageSize=20&catalog=${tag}`, {
method: 'GET',
mode: 'cors'
}).catch((error) => {
console.log(error)
})
return await response.json().catch((error) => {
console.log(error)
})
}
1.资讯页
NewsList.vue
<!-- 资讯 -->
<template>
<div>
<!-- 轮播图 -->
<swiper :list="imgs" auto style="width:100%;height:120px;margin:0 auto;" dots-class="custom-bottom" dots-position="center"></swiper>
<!-- 滚动列表 -->
<div>
<scroller lock-x scrollbar-y :height="height" :bounce=false :scrollbarY="false" ref="scroller">
<div class="news-wrap-list">
<cell v-for="x in Objlist" :title="x.title" :link="{path:'/newsDetail',query:{id:x.id,tag:'资讯'}}" :inline-desc="x.body" :key="x.id">
<img class="ic_img" slot="icon" src="../../assets/img/ic_label_today.png">
<div>
<span class="pubdate">{{x.pub_date}}</span>
</div>
</cell>
</div>
</scroller>
</div>
</div>
</template> <script>
// 引入 vux 内部组件
import { Swiper, Scroller, Cell } from 'vux'
// 引入 api接口文档
import { getList } from '../../api/index.js' // 轮播图列表
const imgList = [
'http://file06.16sucai.com/2016/0222/17714c3b51079911760e5ef7fdb553f6.jpg',
'http://pic.58pic.com/58pic/15/67/98/93C58PICjeM_1024.jpg',
'http://file06.16sucai.com/2016/0315/1df566087c24a94cd9534bc9bc1871ff.jpg'
]; // 轮播图图片地址列表
const urlList = imgList.map((one, index) => ({
url: 'javascript:', //这里填写图片点击的链接
img: one
})); export default {
name: 'NewsList',
components:{
Swiper,
Scroller,
Cell
},
data(){
return {
imgs:urlList,
Objlist:[],
ishow:false,
pageIndex:1,
catalog:0,
height: ''
}
},
created(){
// 获取屏幕高度
this.height = document.documentElement.clientHeight - 46 - 44 - 120 - 53 + 'px';
console.log(this.height);
// 请求列表数据
this.getList();
},
methods:{
// 异步请求
async getList(){
// 获取列表数据
let data = await getList(this.pageIndex, this.catalog);
console.log(data);
// 获取资讯列表数据
var news_list = data.obj_list;
// 判断是否还有数据
if(news_list.length > 0){
this.ishow = true;
for(var i=0;i<news_list.length;i++){
var time = news_list[i].pub_date;
// 修改日期显示格式
var bngDate = new Date(time.replace(/-/g,"/"));
var endDate = new Date();
var minutes = (endDate.getTime() - bngDate.getTime())/60/1000; // 时间段 判断pub_date显示内容
if(minutes >= 60){
minutes = minutes/60;
var dateTime = parseInt(minutes);
if(dateTime >= 48){
news_list[i].pub_date = "2天前";
}else if(dateTime >= 24){
news_list[i].pub_date = "昨天";
}else{
news_list[i].pub_date = dateTime + "小时以前";
}
}else{
var minute = parseInt(minutes);
news_list[i].pub_date = minute + "分钟以前";
} news_list[i].title = " " + news_list[i].title;
this.Objlist.push(news_list[i]);
}
}
this.locked = false;
this.loading = false;
},
load(uuid){
setTimeout(() => {
this.$broadcast('pulldown:reset', uuid);
}, 1000);
}
}
}
</script> <style lang="less" scoped>
.ic_img{
position:absolute; top:10px; left: 5px;
width:15px;
height:15px;
}
.weui_cell_bd>p{
font-size:15px;
}
.vux-label-desc{
padding-right:15px;
}
.weui_cell_bd.weui_cell_primary{
padding-left:5px;
}
.news-wrap-list {
height: 2800px;
overflow: hidden;
}
.pubdate{
font-size:5px;
}
</style>
2.资讯详情页
NewsDetail.vue
<!-- 资讯详情页 -->
<template>
<div>
<tabbar class="tabbar">
<div class="title">{{title}}</div>
<tabbar-item class="search"></tabbar-item>
</tabbar>
<h3 class="htitle">{{result.title}}</h3>
<scroller lock-x scrollbar-y :height="height" :bounce=false :scrollbarY="false" ref="scroller">
<div id="content" class="contentDiv"></div>
</scroller>
</div>
</template> <script>
import { Tabbar,TabbarItem,Scroller} from 'vux'
import { getNewsDetail } from '../../api/index.js'
// 引入 jquery
import "jquery"
var $ = require('jquery');
window.$ = $; export default{
name:'NewsDetail',
data () {
return {
title: '',
result:'',
body: '',
height: ''
}
},
components:{
Tabbar,
TabbarItem,
Scroller
},
created () {
// 获取屏幕高度
this.height = document.documentElement.clientHeight - 50 - 100 - 53 + 'px';
console.log(this.$route.query);
this.title = this.$route.query.tag;
this.getDetail();
},
methods:{
// 获取消息id,根据id到服务端请求详情
async getDetail() {
let data = await getNewsDetail(this.$route.query.id);
console.log(data);
if(data.code >= 0){
this.result = data.obj_data;
this.body = data.obj_data.body;
$(".contentDiv").html(this.body);
//获取div高度,根据该高度设定滑动区域,避免footer位置变化
var contentHeight=$(".contentDiv").height() + 50;
document.getElementById("content").style.height = contentHeight + "px";
this.$nextTick(() => {
this.$refs.scroller.reset();
});
}
}
}
}
</script> <style lang="less" scoped>
.tabbar{
background-color:#00CC66;
height:50px;
position:relative;
}
.search{
position:absolute;right:5px;top:5px;z-index:999;
}
.title{
text-align:center;
margin:auto;
color:white;
line-height:50px;
font-size:18px;
}
.htitle{
text-align:center;
margin:auto;
color:black;
line-height:50px;
height: 100px;
}
</style>
3.效果图

vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页的更多相关文章
- vue2.0 + vux (四)Home页
1.综合页(首页) Home.vue <!-- 首页 --> <template> <div> <!-- 顶部 标题栏 --> <app-head ...
- vue2.0 + vux (三)MySettings 页
1.MySettings.vue <!-- 我的设置 --> <template> <div> <img class="img_1" sr ...
- vue2.0 + vux (五)api接口封装 及 首页 轮播图制作
1.安装 jquery 和 whatwg-fetch (优雅的异步请求API) npm install jquery --save npm install whatwg-fetch --save 2. ...
- vue2.0 + vux (二)Footer组件
1.Footer组件 Footer.vue <!-- 底部 footer --> <template> <div> <tabbar> <!-- 综 ...
- vue2.0 + vux (一)Header 组件
1.main.js import Vue from 'vue' import FastClick from 'fastclick' import VueRouter from 'vue-router' ...
- vue2.0 + vux 项目搭建
1.快速搭建项目模板 因为项目使用vux,所以推荐使用vux官网的airyland/vux2 模板,vue-cli工具是vue项目的搭建脚手架 默认为 webpack2 模板,如果你需要使用webpa ...
- 【数据售卖平台】—— Vue2.0入门学习项目爬坑
前言:这个项目是我从零学习Vue2.0时用于练习基础知识的入门项目,包含了Vue2.0几乎所有项目都会用到的基础功能,是新手用来练手的好项目,这里温故知新对功能点做一个总结.github地址:http ...
- Vue2.0史上最全入坑教程(下)—— 实战案例
书接上文 前言:经过前两节的学习,我们已经可以创建一个vue工程了.下面我们将一起来学习制作一个简单的实战案例. 说明:默认我们已经用vue-cli(vue脚手架或称前端自动化构建工具)创建好项目了 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录
壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...
随机推荐
- PHP模版引擎twig wordpress中调用文章第一张图片
wordpress当文章没有添加Featured media的时候, 就调用文章第一张图片, 调用的wordpress代码函数为: <?php echo catch_that_image(); ...
- Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',
1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...
- [python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)
关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数 ...
- 2017"百度之星"程序设计大赛 - 资格赛
度度熊与邪恶大魔王 Accepts: 3666 Submissions: 22474 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- PHP7异常处理
try { // Code that may throw an Exception or Error. }catch (Exception $e) { } catch (Error $t) { } p ...
- 【bzoj3680】吊打XXX 随机化
题目描述 gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞.这n根绳子有 ...
- 性能学习之--loaderunner压测
打开一个脚本,tools-create Controllwer Scenario,开始场景的设计 一.场景设计--手工测试 1.初始化 2.start vu 一般选择simultaneously,用户 ...
- NOIP2012开车旅行 【倍增】
题目 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城 ...
- RSA签名
RSA签名: /** * RSA签名 * @param content 待签名数据 * @param privateKey 商户私钥 * @return 签名值 */public static ...
- Java防止SQL注入的途径介绍
为了防止SQL注入,最简洁的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只 ...