03 Vue -课程详细(传参id)、图片显示、推荐课程(主动重定向)
1、CourseDetail 课程详细信息

1.如何传入参数id
(1)router中导入

(2) router-link 关联子组件

(3)detail.vue接受id




(4)通过id查询详细

2.图片显示
(1)图片路径与效果

(2)v-for循环图片路径

3.ajax请求:点击跳转
(1)后端json数据

(2)ajax请求


(3)效果图

2、推荐课程切换
1. url 跳转了,id没有跳转
detail组件不会重写加载,init不会执行


2.主动重定向:改变url和页面id



3、代码与总结

1.Detail组件代码
<template>
<div>
<h1>课程详细页面</h1>
<p>{{detail.title}}</p>
<p>{{detail.img}}</p>
<p>{{detail.level}}</p>
<p>{{detail.course}}</p>
<p>{{detail.slogon}}</p>
<p>{{detail.why}}</p> <div>
<p>章节</p>
<ul v-for="item in detail.chapter">
<li>{{item.name}}</li>
</ul>
</div> <div>
<p>推荐课程</p>
<ul v-for="item in detail.recommends">
<!--<li><router-link :to="{name:'detail',params:{id:item.id}}">{{item.title}}</router-link></li>-->
<li @click="changeDetail(item.id)">{{item.title}}</li>
</ul>
</div> </div>
</template> <script>
export default {
name:"detail",
data(){
return {
detail:{
title:null,
img:null,
level:null,
recommends:[],
chapter:[],
course:null,
slogon:null,
why:null,
}
}
},
mounted(){
// console.log(this.$route.params.id)
var id = this.$route.params.id
this.initDetail(id)
},
methods:{
// 初始化路由id
initDetail(nid){ var that = this this.$axios.request({
url:"http://127.0.0.1:8001/api/v1/course/" + nid +'/',
method:'GET'
}).then(function (arg){
console.log(arg.data)
if(arg.data.code === 1000){
that.detail = arg.data.data
}else{
alert(arg.data.error)
} }).catch(function(){ })
},
// 改变页面id
changeDetail(id){
this.initDetail(id)
this.$router.push({name:'detail',params:{id:id}}) // 主动重定向
}
}
}
</script> <style scoped> </style>
2.Course组件代码
<template>
<div>
<!-- 1.版本1 -->
<h1>{{ msg }}</h1>
<ul v-for="row in courseList">
<li>
<router-link :to='{name:"detail",params:{id:row.id}}'>{{ row.title }}</router-link>
</li>
</ul> <!-- 2.版本2 -->
<div v-for="row in courseList">
<div style="width:350px;float:left">
<!-- 1.传统写法 -->
<!-- <img src="@/assets/logo.png" alt=""> --> <!-- 2.v-for -->
<!-- <img src="{{ row.course_img }}" alt=""> --> <!-- 3.跳转链接 -->
<router-link :to='{name:"detail",params:{id:row.id}}'><img src="@/assets/logo.png" alt=""></router-link> <h3><router-link :to='{name:"detail",params:{id:row.id}}'>{{ row.title }}</router-link></h3>
<p>{{row.level}}</p> </div>
</div> </div>
</template> <script>
export default {
name:"course",
data(){
return {
msg:"课程列表",
courseList:[]
}
},
mounted:function(){
// vue页面刚加载时自动执行
this.initCourse()
},
methods:{
initCourse:function(){
// 通过ajax向接口发送请求,并获取课程列表
// jquery/axios // npm install axios --save
//第一步:在main.js中配置
//第二步:使用axios发送请求 var that = this this.$axios.request({
//参数
url:"http://127.0.0.1:8001/api/v1/course",
method:"GET" }).then(function(ret){
//ajax请求发送成功后,获取响应的内容
console.log(ret)
if(ret.data.code === 1000){
that.courseList = ret.data.data
}else{
alert("获取数据失败")
} }).catch(function(){
//ajax请求失败后,获取响应的内容
})
}
}
}
</script> <style scoped> </style>
3.router/index.js
import Vue from 'vue'
import Router from 'vue-router'
// import HelloWorld from '@/components/HelloWorld' import Index from "@/components/Index"
import Course from "@/components/Course"
import Micro from "@/components/Micro"
import News from "@/components/News"
import Detail from "@/components/Detail" Vue.use(Router) export default new Router({
routes: [
{
path: '/index',
name: 'index',
component: Index
},
{
path: '/course',
name: 'course',
component: Course
},
{
path: '/micro',
name: 'micro',
component: Micro
},
{
path: '/news',
name: 'news',
component: News
},
{
path: '/detail/:id',
name: 'detail',
component: Detail
},
],
'mode':'history'
})
4.作业

03 Vue -课程详细(传参id)、图片显示、推荐课程(主动重定向)的更多相关文章
- 18 vue 动态路由传参
params形式 http://192.168.1.100:8080/#/infoDetailed/231 //定义路由{ path: "/infoDetailed/:newsId" ...
- vue.js 1中父组件跳到子组件中并传参让子组件显示不同的内容
父组件中的点击跳转: <ul class="insurance-entry clearfloat"> <li v-link="{name:'produc ...
- vue 父子组件传参
父向子组件传参 例子:App.vue为父,引入componetA组件之后,则可以在template中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,component ...
- webpack+vue 组件间传参(单一事件中心管理组件通信--$root),如果有路由的话会失效
先给一个例子: <body> <div id="box"> <com-a></com-a> <com-b></co ...
- vue子组件传参给父组件
关于父组件传参给子组件,可以看我另一篇文章 教程开始: 我们要实现的效果是:在子组件的Input框输入,父组件中实时更新显示.(也就是把子组件中的数据传给父组件) 一.子组件代码 template部分 ...
- vue父组件传参给子组件
其实组件之间传参有很多种方法: 1.通过本地存储 2.使用vuex状态管理 今天记录一下第三种方法 1.首页我们先创建一个项目(创建项目自行百度) 2.打开项目,在components文件夹下新建一个 ...
- vue路由组件传参
在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性. 使用 props 将组件和路由解耦: 取代与 $route 的耦合 const ...
- vue之路由传参三种基本方式
现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click= ...
- vue中路由传参的方式
一.params的类型: 配置路由格式: /router/:id 传递的方式: 在path后面跟上对应的值 传递后形成的路径: /router/123, /router/abc 通过:to字符串拼接的 ...
随机推荐
- Design HashSet
Design a HashSet without using any built-in hash table libraries. To be specific, your design should ...
- Python 解leetcode:2. Add Two Numbers
题目描述:输入两个非空单链表,链表的每个结点的值是一个1位数整数,两个链表都是一个大整数每一位的逆序排序,求这两个链表代表的整数的和的链表值: 思路: 分别遍历两个链表,转化成相应的整数,求和后把结果 ...
- Ural 1238 Folding 题解
目录 Ural 1238 Folding 题解 题意 题解 程序 Ural 1238 Folding 题解 题意 定义折叠.展开为: 单个大写英文字母是一个折叠的串,把它展开后是它本身. 如果\(S\ ...
- 用python打开文件夹的三种方式
一.利用explorer.exe import os # 利用explorer.exe执行 start_directory = r'C:\代码\软件包' os.system("explore ...
- S03_CH04_AXI_DMA_OV5640摄像头采集系统
S03_CH04_AXI_DMA_OV5640摄像头采集系统 4.1概述 本课程讲解如何搭建基于DMA的图形系统,方案原理和搭建7725的一样,只是OV5640显示的分辨率是1280X720如下,只是 ...
- 第九章 MIZ702 ZYNQ片上ADC的使用
9.0难度系数★☆☆☆☆☆☆ 9.1实验概述 这次借助zynq的内嵌的XADC来采集zynq内部的一些参数: •VCCINT:内部PL核心电压 •VCCAUX:辅助PL电压 •VREFP:XADC ...
- 1、ECharts(中国地图篇)的使用
一.网址: http://echarts.baidu.com/download.html点击: 完整下载文件: echarts.min.js ...
- Qt之QTableWidget
学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研究人一样一样的),因为QTableWidget继承于类QTableView. 两者主要区别是QTableV ...
- Django 之form简单应用
form组件 参考链接:https://www.cnblogs.com/maple-shaw/articles/9537309.html form组件的作用: 1.自动生成input框 2.可以对数据 ...
- 在php中连接数据库 pdo
在php中连接数据库 pdo //数据库信息 $mysql_conf = array( 'host' => '127.0.0.1', 'db' => 'meteorolog_foreign ...