2017-10-13 87 views
0

我有一系列代表不同表單字段類型的組件。這些設計不會對父母有任何依賴性,因此所有各種​​屬性都會作爲單獨的道具傳遞。Vue和重複的道具

我想爲這些字段編寫一個包裝器組件,它將處理一些特定於我當前實現的邏輯。

這個想法是,我將有一個名爲mws-field的組件,它將處理額外的邏輯,然後根據其type prop來輸出所需的組件。

但是,這意味着將父組件中的所有道具映射到每個子組件。目前我mws-field模板看起來是這樣的:

<template> 
    <form-field-select v-if="field && type == 'select'" 
     :label="label" 
     :classes="classes" 
     :placeholder="placeholder" 
     :tooltip="tooltip" 
     :domName="field.domName" 
     :required="field.required" 
     :value="field.value" 
     :disabled="field.vm.disabled" 
     :review="field.vm.review" 
     :errors="field.errors" 
     :options="options" 
    ></form-field-select> 

    <form-field-text v-else-if="field && type == 'text'" 
     :label="label" 
     :classes="classes" 
     :placeholder="placeholder" 
     :tooltip="tooltip" 
     :domName="field.domName" 
     :required="field.required" 
     :value="field.value" 
     :disabled="field.vm.disabled" 
     :review="field.vm.review" 
     :errors="field.errors" 
    ></form-field-text> 

    ... etc 

</template> 

我有不止這些組件的一打的情況下,他們共享同一套道具居多。

我認爲答案在render()方法,但據我所知,這將需要functional標誌,這是組件不支持。

有沒有一個更簡潔,整潔,更易於管理的方法?

+0

怎麼樣通過所有這些對象中的呢?你可以簡單地把所有這些道具放到一個對象中,並將它們傳遞給你的組件。 – Terry

+0

此外,截至11小時前,[最新版本的Vue](https://github.com/vuejs/vue/releases)支持'input'元素上的動態'type'。 https://jsfiddle.net/w2x5em9z/ – thanksd

+0

@thanksd,這真的很好知道,歡呼! – rhoward

回答

0

你可以給v-bind目的是確定要通過道具:

<template> 
    <form-field-select v-if="field && type == 'select'" v-bind="inputProps"/> 
    <form-field-text v-else-if="field && type == 'text'" v-bind="inputProps"/> 
</template> 

data() { 
    return { 
    inputProps: { 
     label: this.label, 
     classes: this.classes, 
     placeholder: this.placeholder, 
     tooltip: this.tooltip, 
     domName: this.field.domName, 
     required: this.field.required, 
     value: this.field.value, 
     disabled: this.field.vm.disabled, 
     review: this.field.vm.review, 
     errors: this.field.errors, 
     options: this.options, 
    } 
    } 
} 

Here's the documentation on v-bind.

+0

你美麗!沒有意識到我可以像這樣傳遞v-綁定一個對象,但這正是我所追求的。非常感謝。 – rhoward