【问题标题】:placeholder for select in vuejs 2.0.0vuejs 2.0.0 中选择的占位符
【发布时间】:2017-03-15 12:12:58
【问题描述】:

我正在使用vuejs 2.0 创建一个网络应用程序。我使用以下代码创建了简单的选择输入:

  <select v-model="age">
    <option value="" disabled selected hidden>Select Age</option>
    <option value="1"> 1 Year</option>
    <option value="11"> 11 Year</option>
  </select>

我在 Vue 组件的 data 中有这个:

data () {
  return {
    age: "",
  }
},
watch: {      
  age: function (newAge) {
    console.log("log here")
  }

但是在为选择添加默认值时我开始收到此错误:

./~/vue-loader/lib/template-compiler.js?id=data-v-5cf0d7e0!./~/vue-loader/lib/selector.js?type=template&index=0! 中的错误。 /src/components/cde.vue 模板语法错误: 使用 v-model 时,将忽略 inline selected 属性。改为在组件的数据选项中声明初始值。

@./src/components/cde.vue 10:23-151

@ ./~/babel-loader!./~/vue-loader/lib/selector.js? type=script&index=0!./src/views/abcView.vue @ ./src/views/abcView.vue

@./src/router/index.js

@./src/app.js

@./src/client-entry.js

@多应用

我也尝试在组件的数据部分中提供默认值,但什么也没发生。我也尝试了v-bind,但随后观察者停止处理年龄变量。

【问题讨论】:

  • jsfiddle.net/vjvMp/668 似乎工作正常
  • 是的,当我从默认选项中删除选择时,它起作用了。谢谢@haim770

标签: javascript select vue.js vuejs2


【解决方案1】:

将其他答案加起来,因为它们在特定条件下似乎都是正确的: 它取决于您的 v-model 变量所期望的数据类型,例如,如果它期望一个整数传递 :value="null" 或 :value="undefined" 会起作用,但如果它期望一个对象,那么你需要传递 :value="{}"。

//Example: data/v-model expects integer
<select v-model="param">
   <option :value="undefined" disabled>Placeholder text</option>
   <option value="1">1</option>
   <option value="11">11</option>
</select>

//Example: data/v-model expects object
<select v-model="param">
   <option :value="{}" disabled>Placeholder text</option>
   <option
        v-for="item in items"
        :key="item.id"
        :value="item"
      >
        {{ item.propery }}
   </option>
</select>

对于字符串 null 或未定义的值应该可以工作,但您也可以在数据对象中定义一个占位符。

【讨论】:

    【解决方案2】:

    我让它工作的唯一方法:

    <select v-model="selectedTemplate" class="btn btn-default">
       <option v-for="template in templates" v-bind:value="template.tasks"}{{template.name}}</option>
       <option :value="this.selectedTemplate" disabled hidden>Select a template</option>
    </select>
    

    键是禁用隐藏选项中的:value=this.selectedtemplate

    【讨论】:

    • 这个方法不起作用。所有在选择除默认值以外的任何其他值时,SelectBox的状态不会更改 span>
    • @ktscript 它适用于我的应用程序。也许您忘记了列表中的 v-bind:value?
    • 不,我没有忘记,您的代码正在为我循环。但也许应该在我的代码中找到原因。
    【解决方案3】:

    以 Shivam Bisht 为基础,以防您无法访问默认值。 只需将 value="undefined" 添加到您的占位符选项标签中。

    占位符文本

    var demo = new Vue({
      el: '#demo',
      data: function() {
        return {
          param: undefined,
        };
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div id="demo">
      <select v-model="param">
        <option value="undefined" disabled>Placeholder text</option>
        <option value="1">Dutch woman are beautiful.</option>
        <option value="11">German Men are slow.</option>
      </select>
    </div>

    【讨论】:

    • 对我有用,但我输入了 :value="undefined",不需要在数据中分配任何内容。
    【解决方案4】:

    对于占位符,您需要将 value 属性设置为与您的状态中定义的初始值相同的值。

    使用

    更改您的禁用选项
    <option value="null" disabled selected hidden>Select Age</option>
    

    在状态下做这样的事情

    data () {enter code here
      return {
        age: null,
      }
    }
    

    【讨论】:

      【解决方案5】:

      对于可能遇到此问题的其他人,我还有一个额外的步骤可以显示默认选项。在我的例子中,我绑定的v-model 返回的是null,而不是一个空字符串。这意味着一旦启动 Vue 绑定,就永远不会选择默认选项。

      要解决这个问题,只需将默认选项的value 属性绑定到null

      <select v-model="age">
        <option :value="null" disabled>Select Age</option>
        ...
      </select>
      

      http://jsfiddle.net/2Logme0m/1/

      【讨论】:

      • 加:添加禁用,隐藏属性可以从选项列表中隐藏占位符。例如
      • 这是最好的答案
      【解决方案6】:

      唯一需要做的就是从默认option中删除selected

       <select v-model="age">
          <option value="" disabled hidden>Select Age</option>
          .....
        </select>
      

      【讨论】:

      • 是的,如果你想预先选择某些东西,你必须设置像this.age="1"这样的值,这会导致在DOM渲染时自动选择“1年”。
      猜你喜欢
      • 1970-01-01
      • 2020-04-23
      • 2018-10-13
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多