使用vue渲染表单元素

Question.vue的代码,学习了如何使用vue渲染表单。v-model的名称是变量的时候使用数组,如果是多选框提前定义好变量类型。不然多选框值变成true或者false

<template>
  <div class="Questionnaire">
    <div id="content" class="content">
      <div class="no_data_row">
        <div>抱歉还没有相关记录</div>
      </div>
      <div class="singleList">

        <div class="type">一、单选题</div>
        <div class="single" v-for="(single,index) in singles">
          <div class="problem" v-text='index+1+"、"+single.question'></div>
          <div class="Options" v-for="Option in single.question_option">
            <label><input :name='"S"+(index+1)' v-model='S[index+1]' type="radio" :value="Option" :is_require="single.is_require" >{{Option}}</label> <br>
          </div>
        </div>
      </div>

      <div class="MultipleList">
        <div class="type">二、多选题</div>
        <div class="Multiple" v-for="(Multiple,index) in Multiples">
          <div class="problem" v-text='index+1+"."+Multiple.question'></div>
          <div class="Options" v-for="Option in Multiple.question_option">
            <label><input :name='"M"+(index+1)' v-model='M[index+1]' type="checkbox" :value="Option" :is_require="Multiple.is_require">{{Option}}</label><br>
          </div>
        </div>
      </div>
      <div class="hortAnswerList">
        <div class="type">
          <div class="type">三、简答题</div>
          <div class="hortAnswer" v-for="(hortAnswer,index) in hortAnswers">
            <div class="problem" v-text='index+1+"."+hortAnswer.question'>7.你对本次团建有什么建议或意见</div>
            <textarea :name='"H"+(index+1)' v-model='H[index+1]' id="" is_require="0"></textarea>
          </div>
        </div>
      </div>
      <div class="btn" @click="submit"></div>
      <div>{{$store.state.layer_content}}</div>
    </div>
  </div>
</template>

<script>
    import axios from 'axios'
    import store from '@/vuex/store'
    import {state,mutations} from '@/vuex/store'

    var instance = axios.create({
        baseURL: 'http://www.wljkxys.com/api3c',
        timeout: 1000,
        //headers: {'token': '123456789'}
    });
   instance.defaults.headers.common['token'] = '123456789';
export default {
  name: 'Questionnaire',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      singles:{},
      Multiples:{},
      hortAnswers:{},
        S:[],
        M:[],
        H:[],
        answer_content:""
    }
  },

  created(){
    this.load();

  },
  methods: {
      closeDialog: function () {
          this.show = false;
      },
      load: function () {
          axios.get('http://www.wljkxys.com/api3c/yao_questionnaire/getQuestionnaireDetail?user_id= 8&yao_questionnaire_id= 30')
              .then(response => {
                  console.log(response);
                  var data = response.data.data;
                  this.singles = data.include_radio;
                  this.Multiples = data.include_select;
                  this.hortAnswers = data.include_answer;
                  console.log(this.singles.length);
                  for (var i = 0; i <= this.singles.length; i++) {
                      this.S.push("");
                  }
                  for (var i = 0; i <= this.Multiples.length; i++) {
                      this.M.push([]);
                  }
              })
              .catch(error => {
                  console.log('网络错误,不能访问');
              })
      },
      submit: function () {
          this.answer_content = "";
          for (var i = 1; i < this.S.length; i++) {
              this.answer_content = this.S[i] + "|;";
              console.log("jja");
              console.log("this.S[" + i + "]==" + typeof(this.S[i]));
              if (this.S[i] == ""){
                this.$store.commit("setLayerContent","请填写完整");
               // setTimeout('this.$store.commit("setLayerContent","")',2000);
               var vue = this;
               console.log(vue)
                setTimeout('console.log(vue)',2000);
//                setTimeout('alert(111)',2000);
              }
//              layer.open({content: '请填写完整!', skin: 'msg', time: 2});
              return;

          }
          console.log(this.answer_content);

      }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
  iframe {
    display: none;
  }
  .Questionnaire{
    text-align: start;
  }
  .type{
    font-size:0.32rem;
    color:rgba(17,17,17,1);
    font-weight: 600;
    line-height: 0.7rem;
  }
  .content{
    margin-top: 0.97rem;
    padding: 0.3rem 0.32rem;
  }
  .problem{
    font-size:0.32rem;
    color:rgba(17,17,17,1);
    font-weight: 600;
    line-height: 0.7rem;
  }
  .Options{
    color:rgba(22,22,22,1);
    font-size:0.32rem;
    line-height: 0.6rem;
  }
  .Options input{
    margin-right: 0.23rem;
  }

  input[type=radio],input[type=checkbox] {
    display: inline-block;
    vertical-align: middle;
    width: 0.26rem;
    height: 0.26rem;
    -webkit-appearance: none;
    background-color: transparent;
    border: 0;
    outline: 0 !important;
    color: #d8d8d8;
  }

  input[type=radio]:after,input[type=checkbox]:after {
    content: "";
    display:block;
    width: 0.26rem;
    height: 0.26rem;
    border-radius: 50%;
    text-align: center;
    line-height: 14px;
    color: #fff;
    border: 1px solid #616161;
    background-color: #fff;
    box-sizing:border-box;
  }

  input[type=radio]:checked:after,input[type=checkbox]:checked:after {
    width: 0.23rem;
    height: 0.23rem;
    border: 0.03rem solid #fff;
    background-color: rgba(102,214,166,1);
    background-size: 0.2rem 0.2rem;
    background-position:center center ;
    position: relative;
    box-shadow: 0 0 0 1px rgba(102,214,166,1);
  }
  textarea{
    margin-top: 0.25rem;
    padding: 0.2rem;
    font-size: 0.32rem;
    width:6.40rem;
    height:2.1rem;
    border:1px solid rgba(180,180,180,1);
  }
  .btn{
    margin: 0.8rem auto 0.3rem auto;
    width:6.34rem;
    height: 0.8rem;
    background: url("../assets/mind_ques_commit@2x.png")no-repeat;
    background-size: 6.34rem 0.8rem;
  }
  .no_data_row{
    display: none;
    min-height: 8rem;
    background: url("../assets/i_no_data@2x.png")no-repeat;
    background-position: center 3.5rem;
    background-size: 30%;
  }
  .no_data_row div{
    position: absolute;
    top:6rem;
    font-size:0.28rem;
    color:rgba(172,172,172,1);
    text-align: center;
    width: 96%;
  }
</style>

转载于:https://my.oschina.net/dmq/blog/1831914

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值