This plugin provides a <contenteditable/>
element supporting v-model
. It also provides some (optional) features, like preventing html input / paste or new lines.
It is inpired by the nice (but limited by design) https://github.com/asconwe/vue-contenteditable-directive .
Contrary to vue-contenteditable-directive
, this plugin has full support of v-model reactivity.
The response is generally NO.
But... there are edge cases where neither <input/>
nor <textarea>
could suit, for example when you need a dynamic object size to adapt to user input text size.
npm install --save vue-contenteditable
In your main.js
:
import contenteditable from 'vue-contenteditable'
Vue.use(contenteditable)
The needed files are already provided in dist/
, but if you want to re build, simlply run :
npm run build
<script src="contenteditable.min.js"></script>
Where you need a contenteditable
element :
<template>
<contenteditable tag="div" :contenteditable="isEditable" v-model="message" :noNL="true" @returned="enterPressed" />
</template>
<script>
export default {
data() {
return {
isEditable: true,
message: "hello"
}
},
methods : {
enterPressed(){
alert('Enter Pressed');
}
}
}
tag
String
Html element type (p
,div
...)v-model
v-model
as usually used with<input/>
and<textarea/>
:contenteditable
- (Default :
true
) Forwarded to DOM's contenteditable. noHTML
- (Default :
true
) Prevent insertion (either typed or pasted) of html text noNL
- (Default :
false
) Prevent insertion of new-lines. Also activatereturned
event emission v-on:...
- All comon input DOM events are forwarded, so that you can use
v-on
as usual.
returned
- When the user press :kbd:Return and
noNL
is set, then it emits thereturned
event with the current value (asString
) as argument.
This code is provided as-is, under the terms of the MIT license (see License file for more details).
A link to the original sources and contribution / pull request are welcome if you enjoy / use / contribute to this module ! :)