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. Ubuntu 中QT 用sogou拼音 安装

    1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位,所以我下载64位的安装包 2.按键C ...

  2. LeetCode-Maximal Rectangle[code]

    code: #include <iostream> #include <vector> #include <stack> #include <algorith ...

  3. Eclipse如何设置编译文件.class输出路径

    1.首先我发现我的eclipse中-->project-->build automatically 是勾选上的.好吧,把把前面的勾去掉. 2去掉以后我先clean --> Clean ...

  4. flume 1.4 设置FLUME_CONF_DIR没用

    今天安装Apache Flume 1.4的时候,发现设置了FLUME_CONF_DIR环境变量和flume-env.sh后,运行flume-ng时flume-env.sh中的JAVA_HOME没有生效 ...

  5. DevExpress之ChartControl用法

    DevExpress中的ChartControl顾名思义就是数据基于图表展示,其关键在于Series上的处理. using System; using System.Drawing; using De ...

  6. WCF服务上应用protobuf z

    protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样 的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多.虽然是二进制数据格式,但并没有因此变得 ...

  7. nest 排序

    var result = client.Search<Person>(x => x.Index("personindex").Type("persont ...

  8. C与C++混编

    了解一下C与C++如何合作,gcc和g++编译出来的东西有什么区别. 工具使用 objdump是个好工具,可以用于查看.o文件的内容,也可以查看可执行文件的内容. 查看符号表 objdump -t f ...

  9. sql 嵌套查询

    sql 某一字段 数量大于1 SELECT * FROM ecm_goods_spec AWHERE ( SELECT count( * ) FROM ecm_goods_spec BWHERE A. ...

  10. 一个较复杂的执行redis的lue脚本