Controllo CustomControl
Il controllo CustomControl permette di impostare da zero un controllo custom, sia lato server che lato client. Si appoggia alle proprietà Control class, Control component name e Custom control options per le personalizzazioni.
Personalizzazione
Per aggiungere logica server side è necessario specificare namespace e nome classe nella proprietà del controllo CustomControlClass ereditando dalla classe Control o da una sotto classe.
Lato client va impostato il nome del componente registrato Vue nel campo CustomControlComponent:
Il componente va registrato nel file Scripts/Config/DataWebConfig.ts come in questo esempio:
import Vue from "vue";
import ControlDemo from "@Scripts/DataWeb/Components/Controls/ControlDemo.vue";
export default {
install: (Vue, options) => {
// Add DataWeb components here
Vue.component("app-controldemo", ControlDemo);
}
};
Il componente è strutturato come segue:
// ControlDemo.ts
import Vue from "vue";
import Component from "vue-class-component";
import { Prop } from "vue-property-decorator";
import { Control } from "@DataWeb/Scripts/Infrastructure/Data/Control";
@Component({ name: "ControlDemo" })
export default class ControlDemo extends Vue {
@Prop() readonly control: Control;
@Prop() readonly controls: Control[];
@Prop() readonly store: string;
@Prop() readonly context: any;
@Prop() readonly isDisabled: boolean;
@Prop() readonly isFormUpdating: boolean;
private items: any[] = [];
get navigationContext(): any {
return this.$store.getters["navigationStore/navigationContext"];
}
private created() {
this.$emit("created", this.control);
}
private addItem() {
this.items.push({ title: "This is a new item in the list" });
this.$emit("changeValue", this.control);
}
};
// ControlDemo.vue
<script lang="ts" src="./ControlDemo"></script>
<template>
<div :id="control.fullName" v-if="control.isVisible" class="pty-box-wht cf">
<label class="fl-l">{ { control.title } }</label>
<div class="fl-l">
<div>
<div @click="addItem()" :disabled="isDisabled" class="pty-box-gry">Add item</div>
</div>
<div v-for="(item, index) in items">
<div class="pty-box-wht">{ { item.title } }</div>
</div>
</div>
<div v-if="control.isRequired" class="fl-l">*</div>
<div v-if="control.validationMessage" class="fl-l">{ { control.validationMessage } }</div>
</div>
</template>