【问题标题】:vuetify datepicker clear dates and re render componentvuetify datepicker 清除日期并重新渲染组件
【发布时间】:2020-04-18 04:59:34
【问题描述】:

我在 vuetify js 中有一个日期选择器,我希望清除日期并刷新组件。

我有一个基于日期范围数组过滤的 v-data 表,我希望能够在 datepicker 中添加一个 v-btn clear 来执行此操作,或者在文本字段上使用一个 clear X btn。

data(){
    return
    { 
      date:['',''],
      menu:false,
     }

   }


  <v-menu
    ref="menu"
    v-model="menu"
    :close-on-content-click="false"
    :return-value.sync="dates"
    transition="scale-transition"
    offset-y
    min-width="290px"
  >
    <template v-slot:activator="{ on }">

      <v-text-field
        v-if="selectedTask"
        label="Select Start Date Range"
        readonly
        v-on="on"
        v-model="dates"
      ></v-text-field>


    </template>

     <v-date-picker v-model="dates" range>
        <v-spacer></v-spacer>
      <v-btn text color="primary" @click="menu = false">Cancel</v-btn>
      <v-btn text color="primary" @click="$refs.menu.save(dates)">OK</v-btn>
     </v-date-picker>


  </v-menu>

【问题讨论】:

    标签: javascript vue.js vuetify.js


    【解决方案1】:

    您可以在日期选择器中设置一个清除按钮,如下所示

    <v-date-picker v-model="dates" range>
      <v-btn 
        text color="primary" @click="menu = false">Cancel
      </v-btn>
      <v-btn 
        text color="primary" @click="$refs.menu.save(dates)">OK
      </v-btn>
      <v-spacer></v-spacer>
      <v-btn 
        text color="primary" @click="$refs.menu.save([])">Clear
      </v-btn>
    </v-date-picker>
    

    您也可以将文本字段设为clearable,它会附加一个清晰的图标

    <v-text-field
      v-if="selectedTask"
      label="Select Start Date Range"
      readonly
      v-on="on"
      v-model="dates"
      clearable
    >
    </v-text-field>
    

    【讨论】:

    • 谢谢,最后一件事,我的列表是根据这些日期从自定义过滤器呈现的。当我明确是否有办法重新呈现我的列表时,它会显示所有列表项,就像在初始加载时一样。因为现在您的方法将清除文本字段,但不会根据已清除的日期重新呈现我的列表,即日期 =['',''],这将显示我想要清除的所有列表项。
    • 是的,您可以在清除日期时发出事件。然后从呈现列表的组件中捕获事件。请查看文档以了解如何发出和捕获它vuejs.org/v2/guide/components-custom-events.html
    • 嗨@dontay,您在这里找到第一个评论的解决方案了吗?
    【解决方案2】:

    需要重置整个组件,包括用户在 datepicker 中所做的 UI 选择。通过为v-date-picker 引入v-if="!isReset" 并在清除事件时切换isReset 来做到这一点(这会破坏然后创建组件,有效地重置用户界面状态)。

    脚本 - onClear 方法
      //* Resets data input component state
      onClear() {
        this.isReset = true
        this.$nextTick(() => {
          this.isReset = false
          //* Resetting your data to initial state, eg:
          this.$emit(this.emits.onSave, this.latestAcceptedValue)
        })
      }
    
    
    模板 - 引入v-if 来切换组件
      <v-date-picker v-if="!isReset" v-model="dates" range>
          <v-btn text @click="onClear">Cancel</v-btn>
      </v-date-picker>
    

    【讨论】:

    • 重置 UI 元素对我们来说是迄今为止最好的。在我们的例子中,我们在选择器元素中有一个 TODAY 按钮(按照您的预期执行),但选择器没有重新渲染回选定的日期。我们的解决方案是使用您的 v-if 绑定,但在模型属性上添加监视:watch: { dates: function() { this.isReset = true; this.$nextTick(() =&gt; { this.isReset = false; }) } ...Heavy handed,但以前仅在 TODAY 点击事件上,需要它来对模型也是。还没有缺点。
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2018-08-12
    • 2019-06-01
    • 2013-07-10
    • 2020-02-13
    • 2014-11-16
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多