2016-07-12 22 views
6

Làm cách nào tôi có thể sử dụng mẫu thừa kế (Giống như những gì ngọc bích có, extends file.jade và sau đó các khối có cùng tên sẽ bị ghi đè)?Vuejs mẫu thừa kế

Tôi biết rằng tôi có thể làm mọi thứ với bố cục, nhưng đối với các thành phần như chân trang và tiêu đề xuất hiện trên mỗi trang ngoại trừ một hoặc hai (ví dụ: trang đăng nhập), tôi phải viết chúng trên mọi thành phần. Trong ứng dụng của tôi, tôi có một điều hướng cấp hai và có vẻ như rất khó để lặp lại chúng trên mỗi một trong các thành phần con đó: (

Tôi biết rằng mình có thể sử dụng ngọc và kế thừa tệp ngọc trong các thành phần của mình, nhưng có vẻ sai bởi vì tôi sẽ có một số ngọc bích và một số tác phẩm Vue, là có cách nào khác bất kỳ để làm điều này?

// Component.vue 

<template lang="jade"> 
    extends ./StandardLayout 
    block content 
    router-view 
</template> 
// StandardLayout.Vue 

<template lang="jade"> 
    div 
    navbar 
    div.container 
     div.spacer 
     div.row 
     block content 
<template> 

những gì tôi đã giải quyết cho, là một thư mục bố trí đầy với cách bài trí ngọc bích và tôi sử dụng họ sử dụng vue-cli với webpack template.

+0

Có lẽ tôi là thiếu cái gì nhưng nếu bạn đang sử dụng một 'bộ định tuyến-view' bạn chỉ nên thay đổi thường xuyên ra rằng một phần tử với nội dung trang mới. Vì vậy, bạn chỉ cần mã bố cục cho một trang. – qw3n

+0

Không có bạn, Im sử dụng bộ định tuyến nhưng có một số phần chỉ là đánh dấu html mà tôi không muốn kế thừa chúng bằng cách sử dụng bộ định tuyến, tôi chỉ muốn đánh dấu kế thừa, Im bằng cách sử dụng phương pháp bộ định tuyến ngay bây giờ nhưng có vẻ như quá mức cần thiết – Mohibeyki

Trả lời

1

Trong trường hợp chung nhất trường hợp nếu bạn phải lặp lại cùng một HTML lặp đi lặp lại, một tùy chọn bạn có thể sử dụng là <partial> s.

<partial name="header"></partial> 
<div>My content content</div> 
<partial name="footer"></partial> 

đâu bạn khai báo partials như

Vue.partial('header', '<h3>This is the title: {{title}}</h3>') 
Vue.partial('footer', '<footer>Mini footer</footer>') 

Tuy nhiên nếu bạn đang xây dựng một Single Page Application chiến lược bạn có thể làm theo là chỉ cần có một tiêu đề và một chân quanh <router-view> của bạn, đây là một jsfiddle thể hiện cách làm.

https://jsfiddle.net/gurghet/vdqutw2y/

<header><h1> 
My title: {{title}} 
</h1></header> 
<p> 
    <a v-link="{ path: '/foo' }">Go to Foo</a> 
    <a v-link="{ path: '/bar' }">Go to Bar</a> 
</p> 
<router-view></router-view> 
<footer>Such footer, many links, wow!</footer> 
+0

Vâng tôi đã sử dụng xem router như u đề nghị, tôi đã tìm kiếm một cách để đánh dấu html DRY :) là nó sai để sử dụng ngu ngốc (chỉ html đánh dấu, không có bất kỳ js) thành phần? nó có vẻ hơi ngớ ngẩn với tôi – Mohibeyki

+0

Điều tôi viết là bằng chứng về khái niệm. Nếu bạn đang phát triển một ứng dụng lớn, tất nhiên bạn muốn đóng gói HTML phức tạp trong các thành phần. – gurghet

+0

bằng cách này, partials không còn tồn tại như của Vue 2.0 – allanberry