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动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
基于vue的video播放器的实现示例
Feb 19 Vue.js
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
详解vue3中组件的非兼容变更
Mar 03 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
vue router 动态路由清除方式
May 25 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
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
微信小程序实现蓝牙打印
2019/09/23 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
青春寄语大全
2014/04/09 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
MySQL详细讲解变量variables的用法
2022/06/21 MySQL
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技