使用 Tinymce (ui-tinymce) 时使用 Angular ng-messages 验证 textarea

Validate textarea with Angular ng-messages when using Tinymce (ui-tinymce)

<textarea> 具有 ui-tinymce 属性时,如何使用 ng-messages 验证 ng-maxlength

或者有更好的方法吗?

<div class="form-group">
    <div class="col-sm-12">
        <label>Description</label>
        <p class="small">Please provide as much detailed information as possible.</p>
        <textarea name="description" class="form-control required" ui-tinymce="tinymceOptions" ng-model="aC.testData.description"
                  ng-maxlength="100" required></textarea>
        <div class="help-block" ng-messages="mainForm.description.$error" ng-show="mainForm.description.$touched">
            <p ng-message="required">A description is required.</p>
            <p ng-message="maxlength">Description must not exceed 100 characters.</p>
        </div>
    </div>
</div>

您看到的问题是标准指令只对字符进行计数,如此简单(空)HTML 示例:

<p></p> 

确实会显示为 7 个字符,而实际上没有 "visible" 内容。我为另一个编辑器构建了一个自定义指令,我最终做的是对 HTML 使用 jQuery 的 .text() 函数。这将删除所有 HTML 标记并提供编辑器中实际文本字符数的近似值。这是指令中的部分代码:

var jStrippedString = jQuery(modelValue).text().trim();
return (maxlength < 0) || ngModelCtrl.$isEmpty(jStrippedString) || (jStrippedString.length <= maxlength);

我相信您会想要创建一个自定义属性指令,允许您为编辑器获取模型数据并自己执行此验证。

forced_root_block: "" 添加到 tinymce 选项也应该有效。默认情况下,它不会从一开始就添加 <p></p>