vue-material/src/components/mdTable/mdTableEdit.vue

82 lines
1.9 KiB
Vue
Raw Normal View History

2016-10-27 13:46:40 +00:00
<template>
<div class="md-table-edit" @keydown.esc="closeDialog">
<div class="md-table-edit-trigger" :class="triggerClasses" @click.stop="openDialog">
{{ value || mdPlaceholder }}
</div>
<div class="md-table-dialog" :class="dialogClasses" ref="dialog">
<md-input-container>
<md-input
ref="input"
:id="mdId"
:name="mdName"
:maxlength="mdMaxlength"
:value="value"
2016-10-31 03:38:29 +00:00
:placeholder="mdPlaceholder"
2016-10-27 13:46:40 +00:00
@keydown.enter.native="confirmDialog"></md-input>
</md-input-container>
</div>
</div>
</template>
<script>
export default {
2017-02-13 02:40:43 +00:00
name: 'md-table-edit',
2016-10-27 13:46:40 +00:00
props: {
2016-11-22 03:23:40 +00:00
value: [String, Number],
2016-10-27 13:46:40 +00:00
mdLarge: Boolean,
2016-11-14 20:53:06 +00:00
mdId: String,
mdName: String,
mdPlaceholder: String,
2016-10-27 13:46:40 +00:00
mdMaxlength: [Number, String]
},
data() {
return {
active: false
};
},
computed: {
triggerClasses() {
return {
'md-edited': this.value
};
},
dialogClasses() {
return {
'md-active': this.active,
'md-large': this.mdLarge
};
2016-11-14 20:53:06 +00:00
},
realValue() {
console.log(this.value);
2016-10-27 13:46:40 +00:00
}
},
methods: {
openDialog() {
this.active = true;
this.$refs.input.$el.focus();
document.addEventListener('click', this.closeDialogOnOffClick);
},
closeDialog() {
if (this.active) {
this.active = false;
this.$refs.input.$el.blur();
document.removeEventListener('click', this.closeDialogOnOffClick);
}
},
closeDialogOnOffClick(event) {
if (!this.$refs.dialog.contains(event.target)) {
this.closeDialog();
}
},
confirmDialog() {
let value = this.$refs.input.$el.value;
this.closeDialog();
this.$emit('input', value);
this.$emit('edited', value);
}
}
};
</script>