2016-12-15 30 views
6

Nếu tôi có một hai thuộc tính như thế này,Có thể sử dụng các thuộc tính được tính toán để tính toán các thuộc tính khác trong Vue không?

computed: { 
    id: function(){ return this.$route.query.id; }, 
    hasId: function(){ return this.$route.query.id !== undefined; } 
} 

làm thế nào tôi có thể sử dụng để tính toán idhasId như pseudo-code này?

computed: { 
    id: function(){ return this.$route.query.id; }, 
    hasId: function(){ return id !== undefined; } 
} 
+0

'trở id' -> 'trở this.id()' sửa chữa vấn đề của bạn – aaaaaa

+0

Tại sao bạn không đăng nó như một câu trả lời để nó có thể được chấp nhận? –

+0

vì bạn không thể giảm bớt nhận xét và thường có các câu hỏi trong câu hỏi của OP chỉ được biết qua việc làm rõ – aaaaaa

Trả lời

2

Bạn cần phải sử dụng phạm vi đúng để truy cập vào một tài sản vue tính.

vì bạn đang sử dụng chỉ id, nó sẽ tìm kiếm trong phạm vi toàn cầu và không tìm thấy nó và sẽ trả lại không xác định. Để nhận được tài sản tính vue, bạn cần làm: this.id, do đó, mã của bạn sẽ trông giống như sau:

computed: { 
    id: function() { return this.$route.query.id; }, 
    hasId: function() { return this.id !== undefined; } 
} 

Bên trong một thành phần, this đề cập đến Vue instance của chúng tôi. Tuy nhiên bạn có thể truy cập $ tuyến đường và chức năng tương tự khác từ this, vì chúng đã được quy định tại Vue.prototype, xem dưới đây mã từ vue-router:

Object.defineProperty(Vue.prototype, '$route', { 
    get: function get$1() { return this.$root._route } 
}) 
+0

Tôi không hiểu. Vui lòng xem nhận xét của tôi về câu trả lời khác của @aaaaaa nếu bạn có thời gian. 'this.id()' nên tham chiếu đến đối tượng Vue cơ sở chứ không phải thành phần hiện được tạo, theo sự hiểu biết của tôi. Tôi chắc chắn tôi đang thiếu một cái gì đó nhưng những gì? –

+0

@KonradViltersten đã cập nhật câu trả lời, hãy cho tôi biết nếu câu trả lời của bạn có câu trả lời. – Saurabh

+0

'this' là một cấu trúc rất bị lạm dụng trong javascript. Vue thực sự không nên rối tung với 'điều này' trong những trường hợp khó hiểu như đối tượng 'đã tính'. – aaaaaa

1

Mã giả của bạn rất gần. Chỉ cần thay đổi id để this.id()

computed: { 
    id: function(){ return this.$route.query.id; }, 
    hasId: function(){ return this.id() !== undefined; } 
} 
+0

Tôi không hiểu tại sao nó hoạt động. Theo mọi thứ tôi đã đọc, trong ngữ cảnh này 'this' đề cập đến đối tượng Vue và không phải là cá thể thành phần (đó là lý do tại sao ví dụ' this. $ Route' hoạt động và đó là lý do tôi không thể sử dụng cú pháp JS mới ' prop:() => {...} '). Tôi đoán rằng 'this.id()' sẽ đề cập đến một số thuộc tính 'id' trong đối tượng gốc Vue quá ... Tôi đang thiếu gì, xin vui lòng? –

+0

Tôi không thể nói chuyện với vuejs, nhưng 'this' đề cập đến đối tượng có thuộc tính mà nó sở hữu. Trong trường hợp hasId, 'this' đề cập đến' computed'. Ngoài ra nếu bạn muốn sử dụng cú pháp js mới, thì 'hasId() {return this.id()! == undefined; } 'sẽ là con đường để đi. – aaaaaa

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