【问题标题】:Accessing the computed properties of components in Vue from the parent从父级访问 Vue 中组件的计算属性
【发布时间】:2016-07-26 02:19:53
【问题描述】:

如何从父级访问 Vue 中组件的计算属性?

在这个例子中,我有一个带有物品组件的购物车,我想计算并显示购物车物品的总和:

cart.js

var vm = new Vue({

  el: '#cart',

  components: {
    cartItem: require('./components/cart-item.js'),
  },

  data: {
    items: [
      { name: 'apple', qty: 5, price: 5.00 },
      { name: 'orange', qty: 7, price; 6.00 },
    ],
  },

  computed: {
    // I want to do something like this and access lineTotal from cart
    cartTotal: function() {
      return this.items.reduce(function(prev,curr) {
        return prev + curr.lineTotal;
      }, 0)
    }
  }
});

购物车-item.js

module.exports = {
    template: require('./cart-item.template.html'),
    props: ['fruit'],
    computed: {
      lineTotal: function() {
        return this.fruit.price * this.fruit.qty;
      }
    },
};

主要的html

<li v-for="item in items" is="cart-item" :fruit="item">

...

@{{ cartTotal }}

如何访问每个购物车项目的 lineTotal 属性以用于汇总 cartTotal

请注意,我不想重做 lineTotal 中完成的计算,而是直接使用计算的属性。

【问题讨论】:

  • 虽然@gurghet 为您提供了技术上正确的答案,但我建议您不要访问孩子的此类内容。计算所需的所有数据已经​​存在于购物车中,并且计算基本上是单行的。从子节点访问数据至少与在父节点中单独进行计算一样复杂。
  • 购物车是我用来说明问题性质的一个简单示例。如果计算不是像不时那样是单行的,组件将是一种很好的方式来解耦用于购物车项目的逻辑。除了直接访问child而不对parent做计算,你还有什么建议吗?

标签: javascript vue.js


【解决方案1】:

您必须为孩子命名,例如通过v-ref 指令。然后从父级解析子属性this.$refs.mychild.myproperty

【讨论】:

  • this.$refs 为我返回一个空的 Object {}。我错过了什么吗?
  • 你设置v-ref了吗?
  • Herm... 我刚看到你的 jsfiddle... 不止一件事有问题。您在纯 javascript 中使用过滤器 (| json),并且您将普通的 &lt;tr&gt; 元素视为组件。我认为最好向您展示一个完整的示例,这样您就可以从中学习而不是修复您的示例,这表明解决问题的方法有些奇怪。我会把这个聊天室的链接发给你:chat.stackoverflow.com/rooms/118302/vuejs
猜你喜欢
  • 2020-09-30
  • 2018-08-03
  • 1970-01-01
  • 2021-01-22
  • 2019-01-16
  • 1970-01-01
  • 2018-01-14
  • 2021-11-05
  • 2016-05-17
相关资源
最近更新 更多