我正在使用textangular作为我正在处理的项目的富文本解决方案。
需要清理此输入,因为我们只允许某些html标记。
由于这不是textangular的默认可能性,我创建了一个包含textangular指令的指令。我可以成功清理输入文本,但视图永远不会更新,我已经没有想法如何实现这个
指令:
.directive('chTextAngular', function(){
return {
restrict: 'E',
require: 'ngModel',
template: function(elements, attributes) {
return '<div text-angular ng-model="' + attributes.ngModel + '" id="' + attributes.id + '"></div>';
},
link: function(scope, element, attributes, ngModel) {
scope.$watch(attributes.ngModel, function(n, o) {
if(n !== undefined) {
// Replace all the divs with <br> tags
var sanitized = ngModel.$viewValue.replace(/<div>/gm, '<br>').replace(/<\/div>/gm, ' ');
sanitized = sanitized.replace(/<p>/gm, '').replace(/<\/p>/gm, '<br><br>');
sanitized = $.htmlClean(sanitized, {
allowedTags: ["strong", "em", "ul", "ol", "li", "a", "b", "i", "br"],
allowedAttributes: ["a", "href"]
});
console.log(sanitized);
ngModel.$setViewValue(sanitized);
}
});
}
}
});
日志打印出模型,它显示它实际上是变化的。我只是无法弄清楚如何用textangular更新实际的textarea。
任何人都可以帮助我,或者让我朝着正确的方向前进吗?
答案 0 :(得分:0)
好的,我要问的第一个问题是;你真的需要更新视图吗?如果模型是正确的数据,它是否正常。
其次,您可能应该通过ngModel.$parsers.push(function(n,o){...})
注册您的功能,以避免额外的观察者。
它没有更新的原因是我们在textAngular中有一个catch,以防止模型在有人输入时更新视图。如果在该字段聚焦时执行此操作,则会出现光标移回文本字段的开头/结尾的问题。如果您确实要从模型更新视图,请注册模糊事件处理程序(element.on('blur', ...);
),并且调用scope.updateTaBindtaTextElement()
可能会起作用,具体取决于您的指令附加到哪个范围。如果该功能不起作用,您必须为textAngular元素添加name属性,然后使用textAngularManager.refreshEditor(name);
函数。