1.如果使用路由跳转到别的界面的话,例如从文章list页面跳转到具体文章查看详情页,查看某一个具体就需要传递那个文章的id去后台查询,

this.$router.push的params方法可以实现传递,但是如果在详情页面再一次刷新,你会发现详情页面数据没有了。就需要用query属性把需要的参数传递过去即可解决问题

this.$router.push({
name: 'ArticleDetail',
query: {
articleId: obj.id,
},
path: '/article/detail',
});

2.讲讲饿了么的插件element-ui的组件el-cascade级联选择器的使用

当时在做二级联动,其实select框也可以实现但是cascade不是更方便嘛。

首先提供了:options属性,只要指定选项数组即可渲染出一个级联选择器。代码如下

<el-cascader
:options="options"
v-model="selectedOptions"
@change="handleChange"
  :props="props"
>
</el-cascader>

options数组通过:props来进行数据渲染的。这个属性有三个默认值,value,label,children。可以想象成id,名字和子选项数组,子选项下属性以此类推,还是value,label,children。具体如下图;

可以通过props来修改三个属性值,例如

 props: {
value: 'id',
label: 'name',
children: 'subjects',
}

我做的是分类下的主题。是个二级联动。效果如下:

那么就要往options数组中塞值,首先在vue界面声明如下数据,

data() {
return {
props: {
value: 'id',
label: 'name',
children: 'subjects',
},
options: [],
}
}

接着查询出分类下的所有数据,往options中塞值,代码如下:

async function getTopicIds() {
const result = await getSubjects();
if (result.code === 1200) {
const topicIds = [];
const topicArr = [];
result.data.subjects.forEach((sub) => {
const topic = {};
if (topicIds.indexOf(sub.topic.id) === -1) {
topicIds.push(sub.topic.id);
topic.id = sub.topic.id;
topic.name = sub.topic.name;
topic.subjects = [];
topicArr.push(topic);
}
topicArr.forEach((top) => {
if (top.id === sub.topic.id) {
top.subjects.push(sub);
}
});
});
this.options = topicArr;
}
}

这个时候就可以渲染数据了。

js方法getSubjects如下:

export function getSubjects() {
return fetch({
url: '/api/subjects',
method: 'get',
});
}

后台代码:

subject(主题)和Topic(分类)两个类:

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document; import java.util.List; @Data
@Document
public class Subject {
/**
* id
*/
@Id
private String id; /**
* 名称
*/
private String name;/**
* 主题分类
* 父类
*/
@DBRef
private Topic topic; /**
* 删除标志位
*/
private Integer isDeleted; }
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document; import java.util.List; @Data
@Document
public class Topic {
/**
* id
*/
@Id
private String id; /**
* 名称
*/
private String name; /**
* 图片
*/
private String image; /**
* 删除标志位
*/
private Integer isDeleted; }

controller层代码:

/**
* 获取分类下的所有主题
**/
@GetMapping("{topicId}/subjects")
public ResultData getSubject(@PathVariable("topicId") String topicId){
Optional<Topic> topicOptional = topicRepository.findByIdAndIsDeleted(topicId, SimpleStatus.NO.getCode());
if (topicOptional.isPresent()) {
List<Subject> subjectList = subjectRepository.findByTopicAndIsDeleted(topicOptional.get(),SimpleStatus.NO.getCode());
List<SubjectDTO> subjectDTOList = subjectList.stream().map(SubjectDTO::new).collect(Collectors.toList());
return ResultData.ok().putDataValue("subjects",subjectDTOList);
} else {
return ResultData.notFound();
}
}

持久层采用的mongodb,有兴趣的小伙伴可以研究一下

然后是数据回显(例如修改或者查看详情时),级联框的v-model需要进行赋值,elementui中的组件大概都是用id来做检索,所以把selectOptions用分类和分类下的主题id塞值即可,样子如下。

  this.selectOptions = [subject.topic.id, subject.id];

新手写博,请多多包涵~

vue的细节的更多相关文章

  1. vue经验 - 细节小知识点汇总(更新中...)

    1. $refs 数据这么绑定的: 然后在created中抛出来,猜猜看看打印的是两个什么? 结果如下: 第一个跑出来了,第二个,却undefiend,没有东西?!... 后来去官网查看$refs的解 ...

  2. Vue 使用细节收集

    JSX 中 on 开头的属性名 在用 elementui 中的 el-upload 的时候,他们组件中有一个属性 on-change ,也不知道谁想出来的属性名,太扯淡了,非要 on 开头,我开始的代 ...

  3. vue路由细节探讨

    1.使用router-link 不会让页面刷新,使用a标签会使页面刷新.2.router-link 里面的to="/路由地址" tag=""自定义标签" ...

  4. MVVM以及vue的双向绑定

    原文:https://www.cnblogs.com/onepixel/p/6034307.html MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核 ...

  5. MVC,MVVM,MVP的区别/ Vue中忽略的知识点!

    按照顺序学习: https://scotch.io/courses/build-an-online-shop-with-vue/hello-world Vue Authentication And R ...

  6. vue入门全局配置

    全局配置 Vue.config 是一个对象,包含 Vue 的全局配置.可以在启动应用之前修改下列属性: silent 类型:boolean 默认值:false 用法: Vue.config.silen ...

  7. Vue.js 和 MVVM

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  8. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  9. 使用keepAlive对上下拉刷新列表数据 和 滚动位置细节处理 - vue

    [前言] 使用vue处理项目中遇到列表页面时,之前项目中总会有一些细节问题处理得不太好,这里总结一下,以便优化以后的代码.如下: 1. 使用mint-ui中的LoadMore组件上下拉刷新时,有时无法 ...

随机推荐

  1. JsonCpp操作数组对象

    JsonCpp操作数组对象 概述 ​ Json格式数据中,除了简单的String类型和一些非String类型,也有像各种高级语言中的数组类型一般的数组对象,且Json数组在实际开发中使用频率也比较高, ...

  2. JDBC URL格式定制

    数据库URL制定: 当加载的驱动程序,可以建立程序中使用DriverManager.getConnection()方法的连接.为方便参考,让列出了三个重载DriverManager.getConnec ...

  3. Unable to create a constant value of type 'System.Object'. Only primitive types or enumeration types are supported in this context.

    代码如下: var query = from s in db.LoginUserServices join ss in db.Services on s.ServiceType equals ss.C ...

  4. Docker_1 安装Docker-CE

    安装 免sudo运行docker命令 ustc mirrors service failed 安装 Docker-CE 安装过程参考官网,Ubuntu中如下: ## 1. 从仓库安装 $ sudo a ...

  5. /usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team

    升级python2.6到2.7后,执行ansible后一直显示警告,如标题所示. 因为安装ansible,使用的是yum的方式,而yum使用的是python2.6,所以ansible安装环境为pyth ...

  6. zt 李鸿章听过《彩云追月》?

    ZT 李鸿章听过<彩云追月>? 2013-05-11 09:35:52 编辑 删除 归档在 观世上之音 | 浏览 1041 次 | 评论 1 条 尝试在网上找一点有关<彩云追月> ...

  7. 018os模块

    import   osprint(os.getcwd())   # 获取当前目录  F:\python_code\fullstack_s2\week4\day18 os.chdir(r'C:/User ...

  8. 在Vue-cli项目中引入Bootstrap

    (1)到bootstrap官网下载所需版本的bootstrap.zip文件. (2)将bootstrap.min.css以及bootstrap.min.js解压到assets文件夹,另外还需要将fon ...

  9. BZOJ2118:墨墨的等式(最短路)

    Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...

  10. 浅析webpack打包输出内容

    当我们执行npm run bundle的时候输出了很多信息,那么这些信息都是什么意思呢 Hash: 221e7fd2e8bf82149df7 Version: webpack 4.30.0 Time: ...