实现背景

最近学习《vue实战》,第二篇进阶篇有一个练习

刚好最近在研究vue移动端框架vant

两者结合,实现这么个小项目

实现代码

新建 vue单文件 L0529L.vue

<template>
<div class="dom">
<div class="tmnr">{{showtm+1}}. {{timu[showtm]['tmcontent']}}</div>
<component0529
:info="ziInfo"
:showtm="showtm"
@chooseRadio="changeAnswer"
@chooseCheckbox="changeAnswer"
@chooseInput="changeAnswer"
></component0529>
<div class="buttondom">
<van-button type="primary" v-show="showtm>0" @click="shangtm" :disabled="showtm===0">上一题</van-button>
<van-button
type="primary"
v-show="showtm<timu.length-1"
@click="nexttm"
:disabled="nextdisable"
>下一题</van-button>
<van-button type="warning" @click="chongzhi">重置</van-button>
</div>
</div>
</template> <script>
import component0529 from "./views/component0529"; export default {
name: "",
data() {
return {
showtm: 0,
timu: [
{
id: 1,
type: "radio",
tmcontent: "题目内容1-单选",
xx: [
{ id: "A", nr: "选项A-单选" },
{ id: "B", nr: "选项B-单选" },
{ id: "C", nr: "选项C-单选" }
],
cannext: false,
answer: ""
},
{
id: 2,
type: "checkbox",
tmcontent: "题目内容2-复选",
xx: [
{ id: "A", nr: "选项A", ischeck: false },
{ id: "B", nr: "选项B", ischeck: false },
{ id: "C", nr: "选项C", ischeck: false },
{ id: "D", nr: "选项D", ischeck: false }
],
cannext: false,
answer: []
},
{
id: 3,
type: "input",
tmcontent: "题目内容3-问答",
cannext: false,
answer: ""
}
]
};
},
computed: {
ziInfo() {
return this.timu[this.showtm];
},
nextdisable() {
var a = false;
if (this.showtm == this.timu.length - 1) a = true;
var t = this.timu[this.showtm]["type"];
switch (t) {
case "radio":
if (this.timu[this.showtm]["answer"] == "") a = true;
break;
case "checkbox":
if (
this.timu[this.showtm]["answer"].length != 2 &&
this.timu[this.showtm]["answer"].length != 3
)
a = true;
break;
case "input":
var c = this.timu[this.showtm]["answer"];
if (c.length < 100) a = true;
break;
}
return a;
}
},
components: {
component0529
},
methods: {
nexttm() {
this.showtm++;
},
shangtm() {
this.showtm--;
},
chongzhi() {
if (this.timu[this.showtm]["type"] == "checkbox") {
this.timu[this.showtm]["answer"].length = 0;
for (var i = 0; i < this.timu[this.showtm]["xx"].length; i++) {
this.timu[this.showtm]["xx"][i]["ischeck"] = false;
}
} else {
this.timu[this.showtm]["answer"] = "";
}
},
changeAnswer(ans) {
this.timu[this.showtm]["answer"] = ans;
}
}
};
</script> <style scoped>
.dom{
padding: 14px;
}
.tmnr{
margin: 10px 0px;
text-align: left;
}
.buttondom {
position: absolute;
bottom: 10px;
text-align: center;
width: 100%;
}
</style>

  引入组件 component0529.vue 代码:

<template>
<ul>
<li v-if="info.type==='checkbox'">
<van-checkbox
v-for="infoa in childInfo.xx"
v-model="infoa.ischeck"
@change="changeCheckbox"
>{{infoa.nr}}</van-checkbox>
</li>
<li v-else-if="info.type==='radio'">
<van-radio-group v-model="childInfo.answer" @change="changeRadio">
<van-radio v-for="infoa in childInfo.xx" :name="infoa.id">{{infoa.nr}}</van-radio>
</van-radio-group>
</li>
<li v-else-if="info.type==='input'">
<van-cell-group>
<van-field
v-model="childInfo.answer"
type="textarea"
placeholder="请输入不少于100字"
rows='1'
autosize
border="true"
/>
</van-cell-group>
</li>
</ul>
</template> <script>
export default {
props: ["info", "showtm"],
data() {
return {};
},
computed: {
childInfo() {
var an = this.info["answer"],
type = this.info["type"]; if (type == "checkbox") {
for (var i = 0; i < this.info.xx.length; i++) {
var x = this.info.xx[i];
if (an.join(",").indexOf(x.id) > -1) x.ischeck = true;
}
} return this.info;
}
},
methods: {
changeRadio() {
var a = this.childInfo.answer;
this.$emit("chooseRadio", a);
},
changeCheckbox() {
var a = [];
for (var i = 0; i < this.childInfo.xx.length; i++) {
if (this.childInfo.xx[i]["ischeck"]) a.push(this.childInfo.xx[i]["id"]);
} this.$emit("chooseCheckbox", a);
},
changeInput() {
this.$emit("chooseInput", this.childInfo.answer);
}
},
components: {}
};
</script> <style scoped>
ul li .van-radio,
.van-checkbox {
margin: 16px 0px;
}
</style>

  

实现页面展示

 解释逻辑

1.在L0529L.vue 定义好相关问卷题目,设计好题目类型,内容,选项,选择或者输入的答案等

2.定义一个当前题目id==showtm,用这个参数决定当前显示的是哪道题。

3、将题目传递给子组件component0529.vue,在这里面处理显示选项信息或者输入框

4、子组件信息操作选择完成或者输入了相关信息,修改对应父组件中问题的答案

5、刚接触vue,逻辑方面有些冗余啰嗦,以后有更好的实现想法再进行修改

基于vant实现一个问卷调查的更多相关文章

  1. Android消息传递之基于RxJava实现一个EventBus - RxBus

    前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...

  2. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  3. 基于线程开发一个FTP服务器

    一,项目题目:基于线程开发一个FTP服务器 二,项目要求: 基本要求: 1.用户加密认证   2.允许同时多用户登录   3.每个用户有自己的家目录 ,且只能访问自己的家目录   4.对用户进行磁盘配 ...

  4. 基于 Express 搭建一个node项目 - 起步

    一,如何基于 Express 搭建一个node项目 什么是Express 借用官方的介绍,Express是一个基于Node.js平台的极简.灵活的web应用开发框架,它提供了一系列强大的特性,帮助你创 ...

  5. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  6. 基于 OpenResty 实现一个 WS 聊天室

    基于 OpenResty 实现一个 WS 聊天室 WebSocket WebSocket 协议分析 WebSocket 协议解决了浏览器和服务器之间的全双工通信问题.在WebSocket出现之前,浏览 ...

  7. 如何基于Go搭建一个大数据平台

    如何基于Go搭建一个大数据平台 - Go中国 - CSDN博客 https://blog.csdn.net/ra681t58cjxsgckj31/article/details/78333775 01 ...

  8. 基于PHP实现一个简单的在线聊天功能(轮询ajax )

    基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...

  9. 基于 React 实现一个 Transition 过渡动画组件

    过渡动画使 UI 更富有表现力并且易于使用.如何使用 React 快速的实现一个 Transition 过渡动画组件? 基本实现 实现一个基础的 CSS 过渡动画组件,通过切换 CSS 样式实现简单的 ...

随机推荐

  1. 一例基于thinkphp,jquery和bootstrap渲染的查询数据分页器

    对于某些查询记录很多的结果,web页面不得不采用分页器,现在奉上一例代码,其主要逻辑是:由页面的dom 节点发起ajax请求,返回的查询结果根据页面布局需要进行切片:并根据总记录数和页面展现的条数算出 ...

  2. 对组件、Prop 和 State的研究-----------------引用

    组件 第一步是将 UI 分解成多个组件.例如,我们可以这样来拆分房子: 现在来编码! House:  <div>    <Roof />     // 房顶    <Wa ...

  3. hdu 3572 仪器与任务 最大流 好题 体会建图思想

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. ID生成 雪花算法

    /** * ID生成 雪花算法 */ public class SnowFlake { public static SnowFlake getInstance() { return Singleton ...

  5. 【转】【Linux经验】Codeblocks 13.12自动补全 、缩进解决

    最近使用Xubuntu 14.04学习C语言编程,发现了Codeblocks这款比较方便简单.适合我这种新手的IDE.之前用过Codeblocks10.04,它的代码自动补全和自动缩进让我眼前一亮.但 ...

  6. [笔记]MongoDB 二(Linux下MongoDB API C++编程)

    一.连接类 DBClientConnection,派生自DBClientBase.DBClientBase类是实现query, update, insert, remove等功能. 构造函数:DBCl ...

  7. R_Studio(学生成绩)使用主成分分析实现属性规约

    对11_1_4.csv成绩表进行主成分分析处理 setwd('D:\\data') list.files() #读取数据 dat=read.csv(file="11_1_4.csv" ...

  8. SpringApplication及banner的配置

    配置SpringApplication 如果SpringApplication无法满足要求,你可以自己创建一个局部实例,然后对其进行设置: public static void main(String ...

  9. 20175212童皓桢 实验三敏捷开发与XP实践实验报告

    20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...

  10. Java连接MQTT服务-ws方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...