我对使用vuejs(2.0)还不熟悉.我正在try 降低此功能:

  • 点击一个按钮
  • 子组件中的触发函数
  • 子数据中的增量数

这就是我现在拥有的

HTML:

<div id="root">
    <cart @addtocart="add()"></cart>
    <button @click="$emit('addtocart')">Add to Cart</button>
</div>

JS:

Vue.component('cart', {
  template: `<span>{{ items }}</span>`,
  data() {
    return {
      items: 0
    }
  },
  methods: {
    add() {
      alert('add');
    }
  }
});


new Vue({
  el: '#root',
  components: ['cart'],
});

任何帮助都将不胜感激.谢谢大家!

推荐答案

您可以使用一个集中式集线器将事件发送到(如docs https://vuejs.org/v2/guide/migration.html#dispatch-and-broadcast-replaced中所建议的),然后在您的子组件中监听并响应这些事件.下面是代码的快速更新:

var eventHub = new Vue();

Vue.component('cart', {
  template: `<span>{{ items }}</span>`,
  data() {
    return {
      items: 0
    }
  },
  created() {
    eventHub.$on('add-item', this.add)
  },
  methods: {
    add() {
      alert('add');
      this.items++;
    }
  }
});


new Vue({
  el: '#root',
  components: ['cart'],
  methods: {
    addToCart() {
        eventHub.$emit('add-item')
    }
  }
});

我自己刚刚开始使用vue,所以我可能是错的,但据我所知,让子组件依赖于特定的父组件是个坏主意,因为它会迫使子组件"耦合"到父组件,使其无法运行,并且使其不可移植.不过,从子组件发出事件备份是可以的,因为这只是一个组件,可以让任何正在监听的人知道发生了什么.我猜你可以通过使用this.$parent.$on('add-item', this.method)直接访问父级和它发出的事件,但在我看来这有点黑客.如果根组件和子组件总是以这种方式紧密耦合,那么this.$parent就可以了.上面的"instatiating a new vue instance"示例可能只是实现这一点的另一种方法,而不需要将子组件绑定到父组件,因为vue实例实现了事件系统(从而在方法上公开$emit$)

Vue.js相关问答推荐

将Vite Vuejs应用部署到Apache服务器

Vue.js 3 没有组件的实例?

为什么 Vue 在将设置脚本中的计算(computed)属性渲染到模板时找不到变量

如何在vue js模板中添加foreach和for循环

我如何使用 vuejs 在我的 url 中编码一个令牌

Vuejs 和 Laravel 发布请求 CORS

使用上传组件而不触发 POST 请求

使用数组元素的计算(computed)属性

Vue 组件 Vue-Instant

Jest错误找不到模块....

vue 在 v-model 之后执行 @click

动态更改我的 Vue.js SPA 主题的最佳方式?

找不到模块 'babel-core' 但已安装 @babel/core

如果我刷新我的网页,Vuex store是空的

更改事件上的 Select2 在 Vuejs 中不起作用

IOS在输入焦点上显示键盘

在 Vue 单元测试中单击按钮时触发表单提交

vue-router 如何使用 hash 推送({name:"question"})?

如何使用vue js判断组件本身的数据何时发生变化?

理解 Vue 中的this关键字