angularjs – 表情符号支持textarea或contenteditable div
尝试在写入时支持表情符号来实现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插件 这是我一起投掷的一个工作指令. 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>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |