【问题标题】:vuejs 2 to vuejs 3, how to insert component in contenteditable?vuejs 2 到 vuejs 3,如何在 contenteditable 中插入组件?
【发布时间】:2020-12-02 07:07:51
【问题描述】:

使用 vuejs 2,我可以在 div contenteditable 中插入一个组件(我的测试称为 testo2),代码:

addtesto(){
  let ComponentClass = Vue.extend(testo2);
  let instance = new ComponentClass();
  instance.$mount();

  let sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      range.insertNode(instance.$el);
      window.getSelection().removeAllRanges();
    }
  }
}

我尝试了很长时间,将这段代码转换为 vuejs 3 和他的组合 api(在 setup() 中),但是这段代码不起作用:

const addtesto = () => {
// here it changes
  const instance = createApp(testo2);
  instance.mount();

  // here it is same thing
  let sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      range.insertNode(instance.$el);
      window.getSelection().removeAllRanges();
    }}};

"range.insertNode(instance.$el);" 中的 $el 有问题但我认为组件 testo2 永远不会被挂载。

有人知道怎么做吗?

【问题讨论】:

    标签: vue.js contenteditable vuejs3


    【解决方案1】:

    instance.mount(); 需要传递一个元素

    不确定这里到底发生了什么,但你可以试试这样的方法

    const addtesto = () => {
      const instance = createApp(testo2);
      let sel, range;
      if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
          range = sel.getRangeAt(0);
          instance.mount(range); // mount to range
          window.getSelection().removeAllRanges();
        }
      }
    };
    

    我假设range 是一个元素,您可以直接挂载到它,或者创建一个子元素并挂载到该子元素。

    【讨论】:

    • 实际上,必须挂载新组件,然后range从该组件插入一个节点(必须将新组件发送到range)。你是正确的 mount(),我必须在 vuejs 3 中找到如何做,方法“Vue.extend(newComponent)”。
    • 你想把组件变成元素吗?
    • 是的,丹尼尔。我希望能够插入一个组件,以允许用户使用 Vue 组件带来的方法和其他有用的东西。验证后,文本不应更改。在 Vuejs 2 上,它运行良好,但我很好奇,我想测试 vuejs 3(太棒了)。
    • 这如何适应setup() 函数,还是不使用组合API?你能发布更多代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2021-11-20
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多