我怎样才能首先选择一个时间并在vue js的所有日子里使用它?

时间:2018-02-17 07:18:00

标签: javascript html vue.js vue-component vue-router

我正在收集用户的工作时间。现在用户需要为每一天选择时间。对他们来说这将是耗时的。因此,让他们先选择一个时间,并在所选的所有日子里使用该时间。如果他需要为特定时间改变时间,请让他这样做。

这是我第一次在堆栈溢出中提问。我现在正在为我的项目使用以下代码。

     <div class="form-group">
      <label>Working Hours :</label>
     <div v-for="value in day" class="checkboxFour"<input type="checkbox" id="need" value="value.val" v-model="value.selected" style="width: 10%!important;">
<p>FROM</p>
     <label for="need" style=" width: 20%!important;">{{value.name}}</label>
          <input id="value.from" type="time" v-model="value.from" name="value.from" style="width: 30%!important;">
<p>TO</p>
       <input id="value.to" type="time" v-model="value.to" name="value.to" style="width: 30%!important;">
        <br>

      </div>
    </div> 

当我使用此代码时。我需要为复选框上的每一天选择时间。

我的vue js代码是

work = new Vue({
el: "#work",
  data: {
   data: [],
    day:[
    {name:"Sunday",val:1},
    {name:"Monday",val:2},
    {name:"Tuesday",val:3},
    {name:"Wednesday",val:4},
    {name:"Thursday",val:5},
    {name:"Friday",val:6},
    {name:"Saturday",val:7}
    ],
    string:'',
  },



methods: {
     wrkSubmit: function(e) {
    var arr = [];
    this.day.map(function(v,i) {
     console.log(v.selected == true,);
     if(v.selected == true) 
      {
      arr.push(v.val+'&'+v.from+'&'+v.to);
      }
    });
    this.string = arr.join(',');
           var vm = this;
           data = {};
           data['wrk_list'] = this.string;
            $.ajax({
              url: 'http://127.0.0.1:8000/add/workhour/',
              data: data,
              type: "POST",
              dataType: 'json',
              success: function(e) {
              if (e.status)
              {
                alert("Success")
            }
              else {
               alert(" Failed") 
              }
          }
            });
            return false;
},
   } 

那么,我该如何改进代码,以便用户需要添加一次时间并为所选的所有日期选择该时间。如果某一天的工作时间不同,也让他改变时间吗?

请帮我找一个相同的解决方案.. 谢谢

1 个答案:

答案 0 :(得分:0)

创建一个代表一天的组件,它将默认时间值作为道具接收。作为数据项,它具有是否使用默认值的布尔值,以及fromto的值,如果它不使用默认值,则使用。

work = new Vue({
      el: "#work",
      data: {
        defaultWorkingHours: {
          from: null,
          to: null
        },
        day: [{
            name: "Sunday",
            val: 1
          },
          {
            name: "Monday",
            val: 2
          },
          {
            name: "Tuesday",
            val: 3
          },
          {
            name: "Wednesday",
            val: 4
          },
          {
            name: "Thursday",
            val: 5
          },
          {
            name: "Friday",
            val: 6
          },
          {
            name: "Saturday",
            val: 7
          }
        ],
        components: {
          dayComponent: {
            template: "#day-template",
            props: ['name', 'val', 'defaultFrom', 'defaultTo'],
            data() {
              return {
                useDefaultTimes: true,
                from: null,
                to: null
              };
            }
          }
        }
      });
<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<div id="work">
  <div class="form-group">
    <label>Working Hours :</label>
    <label>
      From
      <input type="time" v-model="defaultWorkingHours.from">
    </label>
    <label>
      To
      <input type="time" v-model="defaultWorkingHours.to">
    </label>
    <div v-for="d in day" class="checkboxFour">
      <day-component :name="d.name" :val="d.val" :default-from="defaultWorkingHours.from" :default-to="defaultWorkingHours.to"></day-component>
    </div>
  </div>
</div>

<template id="day-template">
  <div>
    {{name}}
    <input type="checkbox" v-model="useDefaultTimes">
    <label>
      FROM
      <template v-if="useDefaultTimes">
        <input :value="defaultFrom" name="value.from" disabled>
      </template>
<template v-else>
        <input type="time" v-model="from" name="value.from">
      </template>
</label>
<label>
      FROM
      <template v-if="useDefaultTimes">
        <input :value="defaultTo" name="value.to" disabled>
      </template>
      <template v-else>
        <input type="time" v-model="to" name="value.to">
      </template>
    </label>
</div>
</template>