2016-07-26 16 views
5

Làm thế nào để bạn truy nhập các thuộc tính được tính toán của các thành phần trong Vue từ cha mẹ?Truy cập các thuộc tính được tính toán của các thành phần trong Vue từ phụ huynh

Trong ví dụ này, tôi có một giỏ hàng với các thành phần item và tôi muốn để tính toán và hiển thị tổng các mặt hàng trong giỏ:

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) 
    } 
    } 
}); 

giỏ-item.js

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

html chính

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

... 

@{{ cartTotal }} 

Làm cách nào để truy cập vào các thuộc tính lineTotal của mỗi mục hàng để sử dụng trong tổng hợp cartTotal?

Lưu ý rằng tôi không muốn làm lại các tính toán được thực hiện trong lineTotal mà thay vào đó sử dụng trực tiếp các thuộc tính được tính toán.

+0

Trong khi @gurghet cung cấp cho bạn câu trả lời đúng về mặt kỹ thuật, tôi khuyên bạn không nên truy cập vào các tệp con như thế này. Tất cả các dữ liệu cần thiết cho tính toán có mặt trong giỏ hàng đã có và tính toán về cơ bản là một lớp lót. Việc truy cập dữ liệu từ các trẻ sẽ ít phức tạp nhất vì chỉ đơn giản là thực hiện phép tính trong chính cha mẹ. –

+0

Giỏ hàng là một ví dụ tầm thường tôi đã sử dụng để minh họa bản chất của vấn đề của tôi. Nếu tính toán không phải là một lớp lót như thỉnh thoảng, các thành phần sẽ là một cách hay để tách logic có nghĩa là cho mục giỏ hàng. Bạn có bất kỳ đề xuất nào khác ngoài việc truy cập trực tiếp vào trẻ mà không thực hiện các phép tính trên phụ huynh không? – howellmartinez

Trả lời

6

Bạn phải đặt tên cho trẻ em, ví dụ: bằng chỉ thị v-ref. Sau đó, từ cha mẹ bạn giải quyết các thuộc tính của trẻ em với this.$refs.mychild.myproperty

+0

điều này. $ Refs trả về một đối tượng trống {} cho tôi. Tôi có thiếu gì không? – howellmartinez

+0

Bạn đã đặt v-ref chưa? – gurghet

+0

Herm ... Tôi chỉ thấy jsfiddle của bạn ... hơn 1 điều sai trái với nó. Bạn đang sử dụng các bộ lọc ('| json') trong javascript thuần túy, bạn cũng đang xử lý một phần tử' 'bình thường như thể nó là một thành phần. Tôi nghĩ sẽ tốt hơn nếu chỉ cho bạn một ví dụ hoàn chỉnh để bạn có thể học hỏi từ đó thay vì sửa chữa của bạn, cho thấy một cách tiếp cận hơi kỳ lạ đối với vấn đề. Tôi sẽ gửi cho bạn liên kết trong phòng chat này: https://chat.stackoverflow.com/rooms/118302/vuejs – gurghet

Các vấn đề liên quan