欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-23 10:38:11
前言:vue里面怎样从后台渲染列表,怎么根据文章的id获取文章的具体内容。以及值与值之间的传递,vue-router 里query和params的区别及使用。一、query和params先来看看query和params是怎样传值和接收参数的吧!后面会用到的哦!(1)query方式传参和接收参数query相当于get请求,页面跳转的时候,可以在地址栏看到请求参数传递参数:把数据发送出去this.$router.push({path:'/aaa/bbb/ccc',query:{id....

前言: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:">{{ 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获取后台返回的数据并渲染出来。

本文地址:https://blog.csdn.net/weixin_48931875/article/details/111072161