2016-04-29 32 views
6

Tôi đang cố truy cập phần tử từ phần tử dom trong thành phần Vue của mình nhưng tôi chỉ nhận được 'không'. Nếu tôi đi vào công cụ dev và thử tôi có thể truy cập nó. Tôi cho rằng đó là vấn đề phạm vi nhưng tôi không thể tìm ra câu trả lời.Truy cập phần tử bên trong thành phần Vuejs

<template> 
    <ul class="list-group" id="criteria" v-for="item in criteria"> 
     <li class="list-group-item">{{ item.name }}</li> 
    </ul> 
</template> 

<script> 
    export default { 
     template: "report-criteria", 
     data() { 
      return { 
       criteria: [] 
      } 
     }, 
     ready() { 
      console.log(document.getElementById('criteria')); 
     }, 
     methods: {}, 
    }; 
</script> 

Ai đó có thể giúp bạn?

+1

Dòng 'mẫu:" báo cáo-tiêu chí "' phải được loại bỏ – Jeff

Trả lời

13

VueJS 1.x

Bạn đang có lẽ dễ dàng hơn bằng cách sử dụng các v-el chỉ thị, cho phép bạn để lập bản đồ các yếu tố trong thành phần của bạn để một tài sản vm trên this.$els.

Ngoài ra, AFAIK, bạn không nên kết hợp thuộc tính template với các mẫu trong tệp .vue (giả sử bạn đang sử dụng .vue tệp, tất nhiên).

<template> 
    <ul class="list-group" id="criteria" v-el:criteria v-for="item in criteria"> 
     <li class="list-group-item">{{ item.name }}</li> 
    </ul> 
</template> 

<script> 
    export default { 
     data() { 
      return { 
       criteria: [] 
      } 
     }, 
     ready() { 
      console.log(this.$els.criteria); 
     }, 
     methods: {}, 
    }; 
</script> 
19

answer được đăng bởi @nils là dành cho VueJS 1.x. Chỉ thị v-el đã bị xóa trong các phiên bản mới hơn. Nó được thay thế bởi thuộc tính ref.

Để đạt được điều đó kết quả tương tự trong VueJS 2.x, bạn nên làm như sau thay vì:

<template> 
    <ul class="list-group" id="criteria" ref="criteria" v-for="item in criteria"> 
    <li class="list-group-item">{{ item.name }}</li> 
    </ul> 
</template> 

<script> 
    export default { 
    data() { 
     return { 
     criteria: [] 
     } 
    }, 
    mounted() { 
     console.log(this.$refs.criteria); 
    }, 
    methods: {}, 
    }; 
</script> 

Bạn có thể tìm thêm thông tin về sự thay đổi trong VueJS docs.

+1

Lưu ý rằng ví dụ này không chính xác cho Vue 2, phương thức này được gọi là 'mounted' thay vì' ready': https://vuejs.org/v2 /guide/instance.html#Lifecycle-Diagram – Diego

+0

Xin chào, @Diego! Cảm ơn cho những người đứng đầu lên. Tôi tập trung câu trả lời của mình vào các chỉ thị và không chú ý đến điều đó. Tôi vừa mới cập nhật mã mẫu. –

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