vue实现调查问卷

同步展示:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div id="app">
        <div class="area"
             v-for = "area in 2"    
        >
        <h2>{{ area === 1 ? '提问区' : '回答展示区' }}</h2>
        <ul>
            <li
              v-for = "question in questionList"
              :key = "question.id"
            >
            <h3>{{ question.title }}</h3>
            <!-- 简答 -->
            <div v-if = 'question.type === "short"'>
                <input type="text" v-if="area===1" v-model = "question.answer">
                <span v-else>{{ question.answer }}</span>
            </div>
            <!-- 单选 -->
            <div v-else-if = 'question.type === "single" '>
                <!-- v-if和v-for不能同时出现在一个div上,把v-if放在父级,然后就多了一个div,可以用template不会渲染在页面上 -->
                <template v-if = "area === 1">
                     <div  v-for  = "choose in question.chooseList"  :key = "choose" >
                        <input type="radio" :value = "choose" v-model = "question.answer"/>
                         <span>{{ choose }}</span>
                </div>
                </template>
               <span v-else>{{ question.answer }}</span>
            </div>
            <!-- 多选题 -->
            <div v-else-if = "question.type === 'multiple'">
                <template v-if = "area === 1 ">
                    <div v-for = "choose in question.chooseList">
                        <input type="checkbox" :value = "choose" v-model = "question.answer"/>
                        <span>{{ choose }}</span>
                    </div>
                </template>
                <div v-else>{{ question.answer && question.answer.toString() }}</div>

            </div>
            <!-- 问答题 -->
            <div v-else>
                    <textarea v-if = "area === 1" v-model = 'question.answer'></textarea>
                <span v-else>
                   {{ question.answer }}

                </span>

            </div>

            </div>
        </li>
        </ul>
    </div>
    </div>

    <script>
        const vm = new Vue({
            el:'#app',
            data:{
                questionList: [
  {
    type: 'short',
    title: '1.请问你的姓名是?',
    chooseList: null,
    id: 0
  },
  {
    type: 'single',
    title: '2.请问您的性别是?',
    chooseList: [
      '男',
      '女',
      '保密',
    ],
    id: 1,
  },
  {
    type: 'multiple',
    title: '3. 请选择您的兴趣爱好:',
    chooseList: [
      '看书',
      '游泳',
      '跑步',
      '看电影',
      '听音乐',
    ],
    id: 2,
  },
  {
    type: 'long',
    title: '4. 请介绍一下自己:',
    chooseList: null,
    id: 3,
  },
]

            }
        })
        vm.questionList.forEach(question => {
            const answer = question.type === 'multiple' ? [] : '';
            // question.answer = answer
            // answer为新添加的属性
            vm.$set(question,'answer',answer)
            // if(question.type === multiple){
            //     answer = [];
            // }else{
            //     answer = '';
            // }
        })
    </script>
</body>
</html>
* {
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 14px;
    font-style: normal;
  }
  
  #app {
    display: flex;
    justify-content: space-between;
    width: 1000px;
    margin: 10px auto;
    border: 1px solid #000;
    border-radius: 5px;
  }
  
  #app .area {
    width: 50%;
  }
  
  #app .area:first-child {
    border-right: 1px dashed #000;
  }
  
  #app .area h2 {
    text-align: center;
    margin-top: 20px;
    margin-bottom: 40px;
    font-size: 20px;
  }
  
  #app .area ul {
    padding-left: 20px;
    padding-right: 20px;
    padding-bottom: 20px;
  }
  
  #app .area ul li {
    margin-bottom: 20px;
  }
  
  #app .area ul li h3 {
    margin-bottom: 8px;
  }
  
  #app .area ul li input[type='text'],
  #app .area ul li textarea {
    width: 250px;
    height: 25px;
    padding-left: 8px;
    border-radius: 5px;
    border: 1px solid #888;
    font-size: 12px;
    outline: none;
  }
  
  #app .area ul li input[type='radio'],
  #app .area ul li input[type='checkbox'] {
    margin-bottom: 8px;
  }
  
  #app .area ul li textarea {
    padding-top: 8px;
    height: 100px;
  }
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Django和Vue.js是一对很好的组合,用于创建调查问卷应用程序非常合适。Django是一个强大的后端框架,它提供了简单而高效的方法来管理数据库和处理请求。Vue.js则是一个流行的前端框架,它可以帮助我们构建交互式的用户界面。 在使用Django和Vue.js创建调查问卷应用程序时,我们可以充分发挥两个框架的优势。首先,我们可以使用Django的模型来定义调查问卷的结构,包括问题、选项和回答。Django的ORM(对象关系映射)工具可以帮助我们轻松地将这些结构映射到数据库中。 接下来,我们可以使用Django的视图来处理用户请求。当用户访问调查问卷应用程序时,Django会负责渲染并返回相应的HTML模板。在这些模板中,我们可以使用Vue.js来构建动态的用户界面。Vue.js的数据绑定和组件化特性可以让我们轻松地更新和展示问卷的内容。 当用户填写调查问卷时,Vue.js可以帮助我们实时地监测问卷的变化,包括用户的答案和选项。我们可以使用Vue.js的事件和表单处理机制来实现数据的收集和提交。 最后,Django可以处理从Vue.js发送的数据,并将其保存到数据库中。我们还可以使用Django的模板引擎来生成特定的报告和统计数据,以便进一步分析问卷结果。 综上所述,使用Django和Vue.js创建调查问卷应用程序是一个强大而灵活的选择。这两个框架的结合可以帮助我们轻松地构建一个功能强大且易于使用的调查问卷平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值