vue从后台渲染文章列表以及根据id跳转文章详情详解


Posted in Vue.js onDecember 14, 2020

前言:

vue里面怎样从后台渲染列表,怎么根据文章的id获取文章的具体内容。以及值与值之间的传递,vue-router 里query和params的区别及使用。

一、query和params

先来看看query和params是怎样传值和接收参数的吧!后面会用到的哦!

(1)query方式传参和接收参数

query相当于get请求,页面跳转的时候,可以在地址栏看到请求参数

传递参数:把数据发送出去

this.$router.push({
	path:'/aaa/bbb/ccc',
	query:{
		id:aaaid
	}
})

接收参数:在其他的组件中接收传过来的参数

this.$route.query.id

*注:接收参数是r o u t e ∗ ! ! ! ∗ ∗ 而 不 是 route*!!!** 而不是route∗!!!∗∗而不是router!

$route是当前router跳转的对象,可以获取router实例里的name、path、query、pramas。

(2)params方式传参和接收参数

params相当于post请求,参数不会在地址栏中显示。

传参:

this.$router.push({
	name:'aaa',
	params:{
		id:aaaid
	}
})

接收参数:

this.$route.params.id

注意:params传参,push里面是name不是path!!

二、从后台渲染列表

这里我们要创建一个vue组件,名为ArticleList,用于存放渲染的文章列表。

下面是ArticleList的父组件:

假设叫information

<template>
 <div class="Information">
 <section>
		<p>文章列表为:</p>
  <ArticleList
   :ArticleList_props_Data="ArticleList_props_Data"
   :project_article_Data="project_article_Data"
  ></ArticleList>
  //给子组件传值
  </div>
 </section>
 </div>
</template>

<script>
import axios from 'axios';
import Qs from 'qs';
import ArticleList from "@/components/ArticleList";

export default {
 name: "information",
 components: {
 ArticleList,
 },
 data() {
 return {
		
  current:'1',
  ArticleList_props_Data: {
  current_path: '/index/information'
  },
  
  project_article_Data: [
   {
   id: ``,
  	title: ``,
  	intro: ``,
  	text: ``,
  	issue_time: ``,
  	source:``
   }
  ]

 }
 },

 created(){
 this.get_project_article_Data()
 },

 methods: {

 get_project_article_Data() {

  axios({
  url: `/API/aaa/bbb/ccc/project?${this.current}`, // 后端的接口地址
  method: "get",
  params: {
   page: this.current,
  },
  transformRequest: [
   function (data) {
   data = Qs.stringify(data);
   return data;
   },
  ],
  headers: {
   "Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
  },
  dataType: "json",
  })
  .then((res) => {
   console.log("连接成功"); // 这里多打印一句提示,只是为了更直观一点
   console.log(res); // res 是后端回传的数据,如果连接成功,可以把res打印出来。
   this.project_article_Data=res.data.datas
  })
  .catch(function (error) {
   console.log("连接失败"); // 作用同上
   console.log(error); // 如果连接失败,会抛出错误信息。
  });
 },
 },
}
</script>

<style scoped lang="scss">
//这里就不写css了
</style>

在ArticleList组件里面写入:

<template>
 <div class="hello">
 <div class="project_content">
  <div
  class="project_article_box"
  v-for="item in project_article_Data"
  :key="item.id"
  >
  <h1
   class="project_article_title"
   @click="to_article_content(item.id)"
  >
   <a href="javascript:" rel="external nofollow" >{{ item.title }}</a>
  </h1>
  <p class="project_article_intro">{{ item.intro }}</p>
  <p class="project_issue_time">
   <span>{{item.issue_time}}</span>来源: {{ item.source }}
  </p>
  <a-divider />
  </div>
 </div>
 </div>
</template>

<script>
export default {
 name: "articlelist",
 props: {
 project_article_Data: Array, //注册父组件中导入的数据
 ArticleList_props_Data: Object,
 },
 data() {
 return {
 };
 },
 methods: {
  //根据文章id跳转文章详情
 to_article_content(article_id) {
  this.$router.push({
  path: `${this.ArticleList_props_Data.current_path}/article_content`,
   //根据路径跳转到文章在详情页并给详情页传递id
  query: { article_id: article_id },
  });
 },
 },
};
</script>


<style scoped lang="scss">

</style>

(4)根据id获取文章详情

再创建一个名为“article_content”的vue组件,用来放置文章的详情信息。

acticle_content如下:

<template>
 <div class="Article_Content">
 <section>
  <div id="content">
  <div class="article_container">
   <p>article_id:{{ $route.query.article_id }}</p>
   <p class="article_text_title">
   {{article_text_title}}
   </p>
   <p class="article_text_message">发布时间:{{article_text_message}}</p>
   <a-divider />
   <p class="article_text_content" v-html="this.article_text_content">
   </p>
  </div>
  </div>
 </section>
 </div>
</template>

<script>
import axios from "axios";
import qs from "qs";

export default {
 name: "Article_Content",
 props: {

 },
 data() {
 return {
  article_id: this.$route.query.article_id, //通过路径跳转传过来的id
  article_text_title:"",
  article_text_message:'',
  article_text_content:'',
 };
 },
 created() {
 this.get_article_data(this.article_id);
 },
 methods: {

 /*
  功能:获取文章内容
  参数:article_id  文章id
 */
 get_article_data(article_id) {
		//获取传过来的具体id值
  axios({
  url: `/API/aaa/bbb/${this.article_id}`, // 后端的接口地址
  method: "get",
  params: {
   //给后台传递id地址
   id: this.article_id,
  },
  transformRequest: [
   function (data) {
   data = qs.stringify(data);
   return data;
   },
  ],
  headers: {
   "Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
  },
  dataType: "json",
  })
  .then((res) => {
   console.log("连接成功"); // 这里多打印一句提示,只是为了更直观一点
   console.log(res); // res 是后端回传的数据,如果连接成功,可以把res打印出来。
   this.article_text_title = res.data.title
   this.article_text_message= res.data.issue_time
   this.article_text_content=res.data.content
   this.article_category=res.data.article_category
  })
  .catch(function (error) {
   console.log("连接失败"); // 作用同上
   console.log(error); // 如果连接失败,会抛出错误信息。
  });
 },
 },
};
</script>

在index.js中去注册组件(router),注意路径!!!

import information from '@/components/information'
import ArticleList from '@/components/ArticleList'
import Article_Content from '@/pages/Article_Content'

const router = [
 
 {
 	path: '/index/information',
 	name: 'information',
 	component: nformation,
 	},
 
 {
  path: '/index/information/article_content',
 	name: 'article_content',
 	component: article_content
 }
]

三、总结

1、params和query的区别及使用

2、根据id获取详细信息,id就藏在点击事件里面,当点击时,就跳转到详情页并把此时传过来的id传给后台,在详情页上根据id获取后台返回的数据并渲染出来。

到此这篇关于vue从后台渲染文章列表以及根据id跳转文章详情的文章就介绍到这了,更多相关vue后台渲染文章列表及根据id跳转文章内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
Vue基本指令实例图文讲解
Feb 25 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 #Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 #Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 #Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 #Vue.js
vue3.0实现插件封装
Dec 14 #Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 #Vue.js
Vue实现点击当前行变色
Dec 14 #Vue.js
You might like
PHP json_decode函数详细解析
2014/02/17 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
PHP7新特性
2021/03/09 PHP
js控制的遮罩层实例介绍
2013/05/29 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
销售文员岗位职责
2013/11/29 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
教师节学生演讲稿
2014/09/03 职场文书
党员检讨书
2014/10/13 职场文书
免职证明样本
2014/10/23 职场文书
北京颐和园导游词
2015/01/30 职场文书
入党积极分子个人总结
2015/03/02 职场文书
详解Python中的进程和线程
2021/06/23 Python