首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vue指令对目标的操作

vue指令对目标的操作
EN

Stack Overflow用户
提问于 2018-10-22 16:06:32
回答 1查看 423关注 0票数 3

我想要定义一个vue指令,该指令在单击时切换弹出窗口的显示,我现在拥有的是:

toggle.js

代码语言:javascript
复制
export default {
    bind(el, binding) {
        console.log(binding.value); // this is undefined

        el.onclick = function() {
            console.log(binding.value); // this is undefined as well

            // toggle menu element display
        };
    }
};

component.vue

代码语言:javascript
复制
<template>
    <button v-toggle="$refs.menu">
        ...
    </button>
    <div ref="menu">
        ...
    </div>
</template>

<script>
    import Toggle from 'path/to/toggle.js';

    export default {
        name: "Component",
        directives: {
            Toggle
        }
</script>

在绑定函数binding.value中总是没有定义,可能是因为菜单引用还没有准备好。这样做的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-22 18:22:50

在设置指令时不会填充$refs。您可以使它的表达式成为一个函数,它将在单击发生时计算$refs.menu,而不是在指令设置时计算。

代码语言:javascript
复制
new Vue({
  el: '#app',
  directives: {
    toggle: {
      bind(el, binding) {
        el.onclick = function() {
          const target = binding.value();

          target.classList.toggle('closed');
        };
      }
    }
  }
});
代码语言:javascript
复制
.closed {
  display: none;
}
代码语言:javascript
复制
<script src="https://unpkg.com/vue@latest/dist/vue.js"></script>
<div id="app">
  <button v-toggle="() => $refs.menu">
    Button
  </button>
  <div ref="menu">
    Some junk in the menu
  </div>
</div>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52933500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档