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

作者:Sandy-yan 时间:2024-04-30 10:39:01 

目录
  • 前言:

  • 一、query和params

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

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

  • 二、从后台渲染列表

    • (4)根据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:" 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获取后台返回的数据并渲染出来。

    来源:https://blog.csdn.net/weixin_48931875/article/details/111072161

    标签:vue,渲染,列表
    0
    投稿

    猜你喜欢

  • 如何控制Go编码JSON数据时的行为(问题及解决方案)

    2024-05-22 17:47:47
  • 理想高通滤波实现Python opencv示例

    2022-09-29 03:58:07
  • python 爬虫 实现增量去重和定时爬取实例

    2022-01-26 01:01:37
  • 又一个php 分页类实现代码

    2023-11-15 13:04:56
  • 编写高质量代码的30条黄金守则(首选隐式类型转换)

    2022-07-19 13:03:41
  • Python正则表达式实现简易计算器功能示例

    2021-03-24 16:11:43
  • Ubuntu Server 16.04下mysql8.0安装配置图文教程

    2024-01-21 21:54:37
  • 详谈vue中router-link和传统a链接的区别

    2024-04-09 10:46:05
  • Tableau连接mysql数据库的实现步骤

    2024-01-21 20:50:41
  • Python设计模式结构型享元模式

    2023-12-19 13:57:40
  • 利用Pygame制作简单动画的示例详解

    2022-10-11 21:22:12
  • 使用ASP订制自己的XML文件读写方法

    2008-10-24 09:35:00
  • Oracle不同数据库间对比分析脚本

    2010-07-26 13:24:00
  • Django nginx配置实现过程详解

    2022-11-09 11:42:58
  • golang接收post和get请求参数处理

    2024-04-25 15:26:54
  • python中opencv 直方图处理

    2021-12-24 09:45:17
  • Python字典取键、值对的方法步骤

    2021-12-12 15:26:12
  • tensorflow基于Anaconda环境搭建的方法步骤

    2022-11-04 10:12:58
  • Python Tornado之跨域请求与Options请求方式

    2023-11-24 19:47:08
  • Golang中slice删除元素的性能对比

    2024-05-05 09:33:03
  • asp之家 网络编程 m.aspxhome.com