2017-01-19 21 views

Trả lời

8

Bạn cần phải tạo một "thành phần wrapper" mà sử dụng một chức năng render.

import Vue from 'vue'; 

Vue.component('wrapper-component', { 
    name: 'wrapper-component', 
    render(createElement) { 
    return createElement(
     this.tag, // tag name 
     this.$slots.default // array of children 
    ); 
    }, 

    props: { 
    tag: { 
     type: String, 
     required: true, 
    }, 
    }, 
}); 

sau đó trong bất kỳ mẫu nào khác chỉ cần sử dụng như sau

<wrapper-component tag="div"> 
    <span>All this will be rendered to inside a div</span> 
    <p> 
    All 
    </p> 
</wrapper-component> 

và rằng nên làm điều này

<div> 
    <span data-v-4fcf631e="">All this will be rendered to inside a div</span> 
    <p data-v-4fcf631e=""> 
    All 
    </p> 
</div> 

Để biết thêm về làm cho chức năng xin vui lòng xem official documentation

+1

Có giải pháp nào không yêu cầu bằng chức năng hiển thị không? – rayrutjes

14

Bạn có thể sử dụng phần tử component được tích hợp sẵn như sau:

<component is="span" class="foo" style="color:red"> 
    nested stuff 
</component> 
+0

Điều này sẽ chỉ thay thế thành phần bằng một khoảng không có bất kỳ logic ban đầu nào của thành phần. – rayrutjes

+1

@rayrutjes "logic ban đầu" là gì? OP hỏi làm thế nào để "tạo thẻ động dựa trên đạo cụ" và điều này thực hiện chính xác điều đó. Có lẽ bạn có một trường hợp khác? – krukid

+1

Cũng nên nhớ rằng bạn có thể sử dụng '', và làm điều này bạn có thể chuyển tên thẻ wrapper trong template cha thông qua prop. Nguồn: 'https: // vuejs.org/v2/guide/components.html # Thành phần động' – sandre89

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