【问题标题】:Vue Custom directive not working with template tagVue自定义指令不适用于模板标签
【发布时间】:2020-08-24 20:06:56
【问题描述】:

我遇到了以下指令的问题,它适用于除模板标签之外的任何标签

  Vue.directive('count',{
  bind(el,b,v){
    console.log(b.value);
  },
  inserted(el,b,v){
        console.log(b.value);
  },
  update(el,b,v){
        console.log(b.value);
  }
});

new Vue({
  el: "#app"  ,
  data:{
     value:0
  }
})

<div id="app">
<button @click="value+=1">
inc value
</button>
   <template v-count="value">

   </template>

 <!--  <div v-count="value">

   </div> --> 
</div>

如果 div 上的注释被删除,指令会记录该值,但不会触发模板标签指令的钩子

这里jsfiddle 的问题

谢谢

【问题讨论】:

  • 但是 v-if 指令即使在模板@palaSH 上使用也是有效的
  • 如果条件为真,您可以隐藏模板及其子模板
  • ok 我来解释一下,假设
  • 是的,我明白,当它与
  • 你能解释一下 v-if 钩子在与模板标签一起使用时是如何触发的吗,我不清楚

标签: vue.js vuejs2


【解决方案1】:

模板标签实际上并没有自己挂载任何东西,所以它在 DOM 中没有位置,也没有绑定。在您的情况下,一个简单的解决方案是将 v-count="value" 放在按钮标签上。如果对该指令有更特殊的需求,而您只是给我们占位符代码,那么将其放在 SPAN 或 DIV 上将比模板更有意义。

【讨论】:

  • 实际上使用 div 或 span 可能会破坏设计,尤其是在 ul 标签内,如果您想根据自定义指令逻辑隐藏一些 li,我的问题是为什么 v-if 工作即使它用于模板标签
  • v-if 和 v-for 使用模板,这是正确的。不过,我想我错过了你的问题的重点。如果这个自定义指令是关于显示或隐藏的,那么该信息对我们很有帮助(并且使用带有计算属性的内置 v-if/v-show 更好地服务)。
  • 我的问题是关于为什么内置 v-if 在模板上工作,但是任何自定义指令都不起作用,无论指令的逻辑如何,如果不清楚,我可以编辑问题
猜你喜欢
  • 2017-03-14
  • 1970-01-01
  • 2019-01-29
  • 2015-10-23
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
相关资源
最近更新 更多