【问题标题】:How can i set character limit in quill editor如何在羽毛笔编辑器中设置字符限制
【发布时间】:2017-08-05 19:36:54
【问题描述】:

我在 Angular 2 中使用 Quill 编辑器,并希望将用户限制为 最多输入 1000 个字符。

【问题讨论】:

    标签: angular quill


    【解决方案1】:

    这是一个使用ngx-quill的示例。

    这样做的一种方法是将 maxLength 设置为所需的数字并向用户显示错误。此外,在用户修复之前,可以阻止该操作。

    看图:

    在这里,我添加了 minLength 和 maxLength 属性。它将在编辑器下方显示一条消息并禁用操作按钮。只有当验证满足时,按钮才会被激活。

    在此处查看代码:

    
        <quill-editor [style]="{height: '200px'}" name="notes" 
          [(ngModel)]="note" [minLength]="10" [maxLength]="400" 
           #noteInput="ngModel"></quill-editor>
    
        <span class="hints" *ngIf="!noteInput.valid">
          Min 10 characters and note more than 400</span>
    
       <button fxFlexAlign="end" mat-raised-button color="primary" 
         class="btn--rounded" (click)="addNote()" 
         [disabled]="!ticketNoteInput.valid">Add</button>
    
    

    【讨论】:

    • 能否分享完整代码?
    【解决方案2】:

    通过添加以下代码在 Angular 7 中修复它。

    @ViewChild('editor') editor: Editor;
      setTimeout(() => {
        this.editor.writeValue(data);
        this.editor.quill.setSelection(null, data.length, null);
      }, 100);
    

    【讨论】:

    【解决方案3】:

    有支持最小长度和最大长度验证的内置配置。但是它没有添加 'errors.minlength' 类。它只会添加“ng-invalid”类。

    <quill-editor [(ngModel)]="topic.description" [bounds]="'self'"  [minLength]="'5'"   #topicDesc="ngModel">
    

    <span *ngIf="!topicDesc.valid" class="requiredField">
                    Topic Description is required
    </span>
    

    【讨论】:

      【解决方案4】:

      同样对于 ngx-quill,jgranstrom 提案的一个变体,专注于控制 HTML 长度。 Typescript 代码,一种简单的解决方法,但仍然可用。

      onContentChanged(context: ChangeContext) {
      
       console.log('Content changed: ', context);
       if (context == null || context.html == null) { return; }
      
       // A HTML - focused version of https://stackoverflow.com/questions/42803413/how-can-i-set-character-limit-in-quill-editor
       // It does cause an error log in the console: 'The given range isn't in document.'
       // Still it's a simple and effective solution.
       if (context.html.length > RESOURCE_TEXT_MAX_LENGTH) {
         let oldDelta = context['oldDelta'];
         if (oldDelta == null) { return; }
         context.editor.setContents(oldDelta.ops);
       }
      }
      

      【讨论】:

        【解决方案5】:

        据我所知,没有内置配置。但是,您可以删除超过一定长度的输入。

        来自thisgithub问题的示例代码

        const limit = 1000;
        
        quill.on('text-change', function (delta, old, source) {
          if (quill.getLength() > limit) {
            quill.deleteText(limit, quill.getLength());
          }
        });
        

        不清楚您使用的是纯羽毛笔还是ngx-quill 之类的东西,所以我无法提供完整的示例。如果您在将其集成到 angular 时需要更多帮助,请提供更多详细信息。

        请记住quill.off(...) 上的ngOnDestroy 上的文本更改处理程序,以防止泄漏。

        编辑

        使用ngx-quill 模块添加的解决方案。

        编辑器组件

        editor.component.ts

        import { Component } from '@angular/core';
        
        const MAX_LENGTH = 10;
        
        @Component({
          selector: 'editor',
          templateUrl: './editor.component.html',
        })
        export class EditorComponent {
          /*
           * Delete added characters that exceeds max length
           */
          textChanged($event) {
            if ($event.editor.getLength() > MAX_LENGTH) {
              $event.editor.deleteText(MAX_LENGTH, $event.editor.getLength());
            }
          }
        }
        

        编辑器模板

        editor.template.html

        <quill-editor (onContentChanged)="textChanged($event)"></quill-editor>
        

        【讨论】:

        • 我正在使用 Angular 2 模块进行羽毛笔
        • @NirajBharti 查看我对 ngx-quill 实现的最新编辑
        • 谨慎使用此解决方案,因为仅当用户在末尾添加文本时才有效。如果用户尝试在中间添加文本会发生什么?
        • 甚至更多,如果你用 5-10 个标签包裹整个内容,试着看看它是如何工作的,尝试让整个内容加粗,然后当它已经达到最大值时变为斜体。实际长度将超过您的最大值。因此,这以某种方式有效,但不能代替剪切内容,而是阻止您的表单并将计数器显示为红色(如果您有)或下面的其他错误消息。
        猜你喜欢
        • 2022-07-06
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 2018-08-22
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多