javascript - 模板内的 Vue 指令

标签 javascript html vue.js vuejs2

我对 vueJs 很陌生,我正在尝试创建类似选项卡菜单的东西。 我有一个下拉导航栏,每个链接都会创建一个新选项卡,这个新选项卡是一个 Vue 组件。

我试图在创建的选项卡中放置一个 v-on:click 指令,但它不会调用该函数。事实上,我遇到了类似

的错误

"Property or method "removeTab" is not defined on the instance but referenced during render."

"removeTab is not a function."

但是 removeTab 是一个函数,如果我将 v-on:click 放在静态 html 标记中,它就可以工作。我做错了什么,还是不可能在动态加载的组件中包含指令?

这是我的代码的简化版本,只是为了更好地展示我想要解释的内容。 RemoveTab 只是一个警报,只是为了显示何时有效、何时无效。

HTML

<div  id="application">

  <button class="item" v-on:click="addTab()">Add Button</button>
  <button class="item" v-on:click="removeTab()">Remove</button>
  <br><br>


  <div >
    <tab v-for ="tab in tabs" :tab="tab"></tab>
  </div>
</div>


 <template id="tab-template">
   <button class="item">
     {{tab.nomeTab}} &nbsp; <div v-on:click="removeTab()">remove</div>
   </button>
</template>

JS

Vue.component('tab', {
  template: '#tab-template',
  props: ['tab']
});

new Vue({
  el: '#application',
  data:{
    newTab:'',
    tabs: [
      {nomeTab:'Home', contenutoTab:'ciao'},
    ]
  },
  methods:{
    addTab: function() {
      this.tabs.push({
        nomeTab: 'NewTab',
      });
    },

    removeTab: function () {
       alert("Here it works");
    }
  }
});

这里是JSFiddle .

感谢您的关注

最佳答案

@Leo 是正确的;本质上,您试图在子级中调用 removeTab 方法,但该方法是在您的父级上定义的。子级无法直接访问父级的方法。

为了让您的示例正常工作,由于您的父级可能会管理选项卡,因此您需要从选项卡中发出一个事件并监听父级中的事件。

<button class="item" v-on:click="$emit('remove-tab')">{{tab.nomeTab}} &nbsp; <div >remove</div></button>

并在父模板中

<tab v-for ="tab in tabs" :key="tab" :tab="tab" @remove-tab="removeTab"></tab>

这是你的 fiddle已修复。

我还为您的v-for添加了一个key。您应该始终将 keyv-for 一起使用。

关于javascript - 模板内的 Vue 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918505/

相关文章:

unit-testing - JEST 不会触发模拟函数 Vue js

JavaScript 访问对象

javascript - JS代码提取Youtube Livestream视频ID

jquery - $.ajax() 只获取正文

asp.net - 如何在 HTML 表格中传输 asp.net GridView 数据

javascript - 尝试设置 Vuejs 输入计算属性的值

javascript - 不同的 'select all'复选框用于不同的复选框列表,angularjs

javascript - Nginx 只提供我的 JS 文件的前 72kbs

javascript - 本地机器上的 Web 服务器,有什么问题吗?

javascript - 需要迭代包含 Vue 对象的数组