angularjs – 表情符号支持textarea或contenteditable div

前端之家收集整理的这篇文章主要介绍了angularjs – 表情符号支持textarea或contenteditable div前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@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)

猜你在找的Angularjs相关文章