【问题标题】:How get clicked item in vue如何在vue中获得点击项目
【发布时间】:2018-12-12 07:01:35
【问题描述】:

我正在尝试做一些基本的事情,但我无法弄清楚。

我有一个下拉菜单:

<div class="dropdown is-active">
  <div class="dropdown-trigger">
    <button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
      <span>{{selectedItem}}</span>
    </button>
  </div>
  <div class="dropdown-menu" id="dropdown-menu" role="menu">
    <div class="dropdown-content" v-model="selectedItem">
      <a class="dropdown-item" v-for="item in items">
        {{item.name}}
      </a>
    </div>
  </div>
</div>


var app = new Vue({
  el: '#app',
  data: {
    selectedItem: null,
     items: [
     {
         name: "Dropdown Item"
     },
     {
         name: "Dropdown Item 2"
     },
     {
         name: "Dropdown Item 3"
     }
    ]
  },
});

基本上,当单击下拉项时,我会尝试这样做,因为我尝试在我的菜单包装器中使用 v-model,但没有发生任何事情。

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    基于 Kumar 的回答,您可以默认访问处理程序方法中的事件只要您不传递任何其他参数

    但是,如果您确实传递了参数,那么您似乎必须使用 $event 显式传递事件:

    <button @click="doStuff('whatever', $event)">Do Stuff</button>
    
    ...
    
    doStuff(whatever, event) {
        console.log(event.target);
    }
    

    如果您要使用事件对象,最好显式传递它而不是依赖默认值。或不,取决于你的观点。让事情变得清晰或节省打字是一个折腾!

    <!-- this works -->
    <button @click="doStuff">Do Stuff</button>
    
    <!-- this works too -->    
    <button @click="doStuff($event)">Do Stuff</button>
    
    ...
    
    doStuff(event) {
        console.log(event.target);
    }
    

    (我用 Vue 2.6 试过这些)

    【讨论】:

      【解决方案2】:

      您不能在此处将v-modeldiv 一起使用。

      相反,您应该使用v-click 调用方法以更新值selectedItem 并处理切换操作。

      还有一件事,当你使用 v-for 时,你应该拥有 Vuejs 推荐的 key id

      只是草拟的实施:

      <div class="dropdown is-active">
        <div class="dropdown-trigger">
          <button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
            <span>{{selectedItem}}</span>
          </button>
        </div>
        <div class="dropdown-menu" id="dropdown-menu" role="menu">
          <div class="dropdown-content">
            <a class="dropdown-item" v-for="item in items" :key="item.id" v-click="handleSelectItem(item)">
              {{item.name}}
            </a>
          </div>
        </div>
      </div>
      
      
      var app = new Vue({
        el: '#app',
        data: {
          selectedItem: null,
           items: [
           {
               id: 1,
               name: "Dropdown Item"
           },
           {
               id: 2,
               name: "Dropdown Item 2"
           },
           {
               id: 3,
               name: "Dropdown Item 3"
           }
          ]
        },
        method: {
           handleSelectItem(item){
             this.selectedItem = item.name;
             // you can also handle toggle action here manually to open and close dropdown
           }
        }
      });
      

      【讨论】:

        【解决方案3】:

        您可以将事件传递给处理函数并通过 event.target

        访问它
        <div class="dropdown-menu" id="dropdown-menu" role="menu">
         <div class="dropdown-content" v-model="selectedItem">
          <a class="dropdown-item" v-for="item in items" @click="HandlerFunction">
            {{item.name}}
          </a>
         </div>
        </div>
        
        var app = new Vue({
         el: '#app',
         data: {
          selectedItem: null,
          items: [
           {
             name: "Dropdown Item"
           },
           {
             name: "Dropdown Item 2"
           },
           {
             name: "Dropdown Item 3"
           }
          ]
         },
         methods: {
          HandlerFunction(event){
           console.log(event.target)
          }
         }
        });
        

        【讨论】:

          【解决方案4】:

          我们也可以通过方法使用 ES6 语法缩写:

          ... template
          <a @click="expand" data-toggle="collapse" aria-expanded="false">{{ menuItem.title }}</a>
          ... more template
          
          
          ... script section
          methods: {
              expand({ target }) {
                console.log('this is the element i clicked: ', target);
              }
            }
          ... more script code
          

          【讨论】:

            【解决方案5】:

            谢谢你,我让你的方式有点不同:

            <a class="dropdown-item" v-model="selectedItem" v-for="item in items" @click="selected(item)">
                    {{item.name}}
                  </a>
            
            
            var app = new Vue({
              el: '#app',
              data: {
                selectedItem: null,
                 items: [
                 {
                     name: "Dropdown Item"
                 },
                 {
                     name: "Dropdown Item 2"
                 },
                 {
                     name: "Dropdown Item 3"
                 }
                ]
                },
                methods: {
                  selected(element) {
                    this.selectedItem = element.name
                  }
                }
              });
            

            【讨论】:

              猜你喜欢
              • 2018-02-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多