pxstrana
pxstrana

Reputation: 88

Wrap text in a Vue component dynamically

Problem

I want to wrap some plain text in a Vue component dynamically, using mouseUp after selecting the text.

For example: <div> Hello World! </div> => <div> <Greeting/> World! </div>

Aprox solution

Right now, I'm wrapping it using document.createElement("span") and surrounding the range of the selection with it.

I have found similar questions like the next one, but I'm trying to avoid render level:

How can I dynamically wrap a substring with a component in Vue.js?

Upvotes: 2

Views: 493

Answers (1)

pxstrana
pxstrana

Reputation: 88

Well, I finally managed to solve it. (Before submitting, I spend a lot of time figuring out. I don't know how I solved it so fast)

Solution

 var ComponentClass = Vue.extend(Annotation);
            var instance = new ComponentClass();
            instance.$mount();
            this.range.deleteContents();
            this.range.insertNode(instance.$el);

Where: Annotation is a Vue component and the Range is the selection range obtained previously.

I hope this help someone else!

Upvotes: 2

Related Questions