使用VueJS,我嘗試創建一個可以處理不同類型記錄的通用組件。編輯列表中的記錄,並用VueJS動態定義兒童屬性
舉例來說,假設我有用戶記錄:
var users = [
{ UserID: 1, username: "pan",email:"[email protected]" },
{ UserID: 2, username: "john",email:"[email protected]" }
];
和組記錄
var groups = [
{ GroupId: 1, groupName: "Users", description: "Lorem ipsum ..." },
{ GroupId: 2, groupName: "Admins", description: "Some people with super powers" }
];
我想創建一個Vue的組件來編輯這些記錄,因此它可以被定義爲這樣的:
<record-editor v-bind:record="user[0]" title="Edit user">
<text-editor label="User name" property="username"></text-editor>
<text-editor label="Email" property="email"></text-editor>
</record-editor>
<!-- For the binding syntax, I am not sure what should
I use to bind to a record in the lists shown before -->
<record-editor v-bind:record="groups[0]" title="Edit group">
<text-editor label="groupName" property="groupName"></text-editor>
<text-editor label="Description" property="description"></text-editor>
</record-editor>
現在,我有什麼是:
(function() {
var textEditor = Vue.component('text-editor', {
template: "#text-editor",
props: ['label', 'property']
});
var recordEditor= Vue.component('record-editor', {
template: '#model-editor',
props: ['title', 'record']
});
var vue = new Vue({
el:"#someContainer",
data: {
users : users,
groups: groups
}
})
}())
<template id="text-editor">
<div>
<label v-bind:for="property">{{label}}</label>
<!-- need help figuring what to put in v-bind:value -->
<input type="text" v-bind:name="property"
v-bind:id="property"
v-bind:value="">
</div>
</template>
<template id="record-editor">
<div>
<h2>{{title}}</h2>
<form>
<slot></slot>
</form>
</div>
</template>
所以基本上,我所缺少的是如何在列表中的元素,以編輯它們。
我該如何動態定義子組件(文本編輯器)的屬性。
你是否知道你正在編寫'text-editor'作爲[slot](https://vuejs.org/v2/guide/components.html#Single-Slot)而不是'record-editor'的子項'? –
爲了確保我理解這種差異,記錄編輯器的一個孩子將被傳遞給記錄編輯器的構造函數中的組件選項,同時將它構建爲一個插槽允許它放在任何位置? – Martin
如果''標籤出現在'record-editor'的*模板*中,它將是一個孩子。在這裏,它們出現在''標籤之間,所以它們默認在外部範圍內(根據Bert的回答,範圍通過使用範圍內的槽來改變)。 –