首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Quill以支持软换行

扩展Quill以支持软换行
EN

Stack Overflow用户
提问于 2020-08-19 22:44:29
回答 1查看 650关注 0票数 2

我正在尝试用一个自定义的Blot来扩展羽毛笔,允许在<p>标记中使用换行符。根据advice given by the library author,我最终得到了如下所示的代码:

代码语言:javascript
复制
import * as Quill from 'quill';

const Delta = Quill.import('delta');
const Embed = Quill.import('blots/embed');

export class SoftLineBreakBlot extends Embed {
    static blotName = 'softbreak';
    static tagName = 'br';  
    static className = 'softbreak';
}

export function shiftEnterHandler(this: any, range) {    
    const currentLeaf = this.quill.getLeaf(range.index)[0];
    const nextLeaf = this.quill.getLeaf(range.index + 1)[0];    
    this.quill.insertEmbed(range.index, "softbreak", true, Quill.sources.USER);    
    // Insert a second break if:
    // At the end of the editor, OR next leaf has a different parent (<p>)
    if (nextLeaf === null || currentLeaf.parent !== nextLeaf.parent) {
      this.quill.insertEmbed(range.index, "softbreak", true, Quill.sources.USER);
    }
    // Now that we've inserted a line break, move the cursor forward
    this.quill.setSelection(range.index + 1, Quill.sources.SILENT);    
}

export function brMatcher(node, delta) {
    let newDelta = new Delta();
    newDelta.insert({softbreak: true});
    return newDelta;
}

我在一个Angular 10项目中使用了ngx-quill包装器。我的Quill模块定义如下:

代码语言:javascript
复制
QuillModule.forRoot({
      format: 'json',
      modules: {
        keyboard: {
          bindings: {
            "shift enter": {
              key: 13,
              shiftKey: true,
              handler: shiftEnterHandler
            }
          }
        },
        clipboard: {
          matchers: [            
             [ "BR", brMatcher ]
          ],          
        }
      },
    }),

但是,每当我按下Shift+Enter键时,光标就会向前移动,但insertEmbed()调用似乎没有任何效果。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-08-03 13:03:37

看起来你只是忘了给Quill.register(SoftLineBreakBlot)打电话

所以:

代码语言:javascript
复制
...
export class SoftLineBreakBlot extends Embed {
    static blotName = 'softbreak';
    static tagName = 'br';  
    static className = 'softbreak';
}
...

变成:

代码语言:javascript
复制
...
export class SoftLineBreakBlot extends Embed {
    static blotName = 'softbreak';
    static tagName = 'br';  
    static className = 'softbreak';
}
Quill.register(SoftLineBreakBlot);
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63489524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档