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系列就基本告 ...
随机推荐
- Leetcode 452.用最少数量的箭引爆气球
用最少数量的箭引爆气球 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐 ...
- django demo --blog
详情,请看虫师博客http://www.cnblogs.com/fnng/p/3737964.html 和https://my.oschina.net/matrixchan/blog/184445 ...
- TOJ4483: Common Digit Pairs
4483: Common Digit Pairs Time Limit(Common/Java):3000MS/9000MS Memory Limit:65536KByteTotal Sub ...
- Linux定时任务Crontab命令详解 转
linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所 ...
- js方法encodeURI后,关于get请求url长度的限制测试与总结
(本文仅作个人记录只用比较啰嗦,重点只看红字部分即可) Test.jsp 请求test1.jsp IE11环境下,get请求url最多4096个字节: 请求的是http://localhost:908 ...
- java并发框架Executor介绍
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- Opus 和 AAC 声音编码格式
Opus编码器 是一个有损声音编码的格式,由互联网工程任务组(IETF)近来开发,适用于网络上的实时声音传输,标准格式为RFC 6716.Opus 格式是一个开放格式,使用上没有任何专利或限制. Op ...
- ROS学习网址【原创】
ROS学习网址 http://www.ros.org/ http://www.ros.org/news/book/ http://wiki.ros.org/ http://blog.exbot.net ...
- CAR_TUNE_VALUE 校準
CAR_TUNE_VALUE 是用來校準 流過電池上的電流 與 系統偵測到的電流 的一致性, 假電 若您是使用假電, 請拔除零件, 僅留下必要元件,如thermal電阻,ID 電阻, 減少量測 fue ...
- java打包python到exe文件
最近想把写的python代码打包,以供没用安装python环境的同事使用,需求如下: 无python环境也可执行 文件尽量少,不要太乱 程序体积尽量小 如果需要更新的话重复类库不用更新 采用方案如下: ...