@H_
502_0@
尝试在写入时
支持表情符号来实现textarea组件.
我想要能够在div上呈现过滤/生成的html结果(带有角度的表情符号过滤器)的原始文本(仅适用于ASCII字符).
我的初步解决方案是
<textarea ng-model="text" ng-change="..." ng-focus="..."></textarea>
<div ng-bind-html="text | myEmoticonsFilter"></div>
但是我无法使用隐藏的文字区域.此外,为此,我将无法鼠标选择文本,删除或复制/粘贴安全.
我也想到使用< div contenteditable =“true”>但不会处理ng-focus和ng-change.
有没有人对如何继续这样做有什么好处?
编辑1:这是一个jsfiddle,尝试我在做什么.到目前为止,能够替代第一次发生,但行为仍然不稳定.我正在使用一个可输入的指令进行双向数据绑定并过滤表情图案.
编辑2:关于我的声明,表示ng-focus和ng-change不会被处理,这不是真的 – ng-focus本身在< div contenteditable =“true”>只要使用ngModel声明了一个指令并设置了相应的$modelValue和$viewValue(编辑1中的jsfiddle中提供了一个示例),ng-change将会起作用.
以一贯的跨浏览器方式执行此操作的唯一
方法是使用将表情符号转换为图像的所见即所得字段.
有一个jQuery插件jquery-emojiarea
可以做你所需要的,所以你只需要创建一个包装这个插件的指令,你就可以参加比赛了.因为它用emoji语法输入隐藏的textarea:smile:angular应该没有困难绑定.
这是我一起投掷的一个工作指令. http://jsfiddle.net/dboskovic/g8x8xs2t/
var app = angular.module('app',[]);
app.controller('BaseController',function ($scope) {
$scope.text = 'This is pretty awesome. :smile: :laughing:';
});
app.directive('emojiInput',function ($timeout) {
return {
restrict: 'A',require: 'ngModel',link: function ($scope,$el,$attr,ngModel) {
$.emojiarea.path = 'https://s3-us-west-1.amazonaws.com/dboskovic/jquery-emojiarea-master/packs/basic';
$.emojiarea.icons = {
':smile:': 'smile.png',':angry:': 'angry.png',':flushed:': 'flushed.png',':neckbeard:': 'neckbeard.png',':laughing:': 'laughing.png'
};
var options = $scope.$eval($attr.emojiInput);
var $wysiwyg = $($el[0]).emojiarea(options);
$wysiwyg.on('change',function () {
ngModel.$setViewValue($wysiwyg.val());
$scope.$apply();
});
ngModel.$formatters.push(function (data) {
// emojiarea doesn't have a proper destroy :( so we have to remove and rebuild
$wysiwyg.siblings('.emoji-wysiwyg-editor,.emoji-button').remove();
$timeout(function () {
$wysiwyg.emojiarea(options);
},0);
return data;
});
}
};
});
使用方法:
<textarea ng-model="text" emoji-input="{buttonLabel:'Insert Emoji',wysiwyg:true}"></textarea>
If you want the editable field to convert text like :(
as you type you’ll need to fork that jquery plugin and modify it slightly to parse input text on change as well as on init. (like,a couple lines of code)