代码之家  ›  专栏  ›  技术社区  ›  Geoff_S

Vue,通过列表项更改输入的名称单击

  •  0
  • Geoff_S  · 技术社区  · 4 年前

    我有一个输入,我正在使用关系2一个无序的列表和两个列表项,这是适当的,但我试图找出如何可以改变输入的名称/id与点击其中一个列表项。

    我使用的是Vue,它可能有一些更好的选项,但基本上我只想稍后在ajax调用中发送输入的名称,我只想通过单击列表项来确定名称,这可能是默认的。

    使用Vue实现此目的的最佳方法是什么?

    <div class="row notesInput">
              <div class="col-lg-12">
                <div class="tabs">
                  <ul style="border-bottom:none !important; text-decoration:none">
                    <li>Public</li>
                    <li>Internal</li>
                  </ul>
                </div>
                <div>
                  <input type="text" name="public">
                </div>
              </div>
            </div>
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   Terry    4 年前

    第一步:充分利用组件数据

    您可以简单地存储所需的输入 name 组件数据中的属性,例如。 inputName v-on 若要将单击事件侦听器绑定到元素,以便在单击它们时调用更新 inputData

    new Vue({
      el: '#app',
      data:  {
        inputName: '',
      },
      methods: {
        setInputName(str) {
          this.inputName = str;
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div id="app">
      <div class="row notesInput">
        <div class="col-lg-12">
          <div class="tabs">
            <ul style="border-bottom:none !important; text-decoration:none">
              <li v-on:click="setInputName('public')">Public</li>
              <li v-on:click="setInputName('internal')">Internal</li>
            </ul>
          </div>
          <div>
            <input type="text" v-bind:name="inputName">
            <br />
            Input name attribute is: {{ inputName }}
          </div>
        </div>
      </div>
    </div>

    更好:使用 v-for 动态生成列表项

    v-代表 要动态生成列表:

    new Vue({
      el: '#app',
      data:  {
        inputName: '',
        allowedNames: ['Public', 'Internal']
      },
      methods: {
        setInputName(str) {
          this.inputName = str.toLowerCase();
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div id="app">
      <div class="row notesInput">
        <div class="col-lg-12">
          <div class="tabs">
            <ul style="border-bottom:none !important; text-decoration:none">
              <li
                v-for="(allowedName, i) in allowedNames"
                v-bind:key="i"
                v-on:click="setInputName(allowedName)">
                {{ allowedName }}
              </li>
            </ul>
          </div>
          <div>
            <input type="text" v-bind:name="inputName">
            <br />
            Input name attribute is: {{ inputName }}
          </div>
        </div>
      </div>
    </div>

    更好的方法是:如果列表项文本和所需的名称属性之间没有一对一的对应关系

    例如,当您希望阅读文本时,这将非常有用 Public 但是name属性是另一个值。可以使用对象数组而不是字符串数组:

    new Vue({
      el: '#app',
      data:  {
        inputName: '',
        allowedNames: [{
          label: 'Public (or any other arbitrary text you like)',
          name: 'public'
        }, {
          label: 'Internal (or any other arbitrary text you like)',
          name: 'internal',
        }]
      },
      methods: {
        setInputName(str) {
          this.inputName = str;
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div id="app">
      <div class="row notesInput">
        <div class="col-lg-12">
          <div class="tabs">
            <ul style="border-bottom:none !important; text-decoration:none">
              <li
                v-for="(allowedName, i) in allowedNames"
                v-bind:key="i"
                v-on:click="setInputName(allowedName.name)">
                {{ allowedName.label }}
              </li>
            </ul>
          </div>
          <div>
            <input type="text" v-bind:name="inputName">
            <br />
            Input name attribute is: {{ inputName }}
          </div>
        </div>
      </div>
    </div>