如何将表情符号应用于 Angularjs 指令列表?

How to apply Emojis to Angularjs directive list?

我正在学习 Angular JS,目前正在做一个聊天应用程序,我想将 Emojione 提供的 Javascript 转换 .shortnameToImage(str) 应用到聊天应用程序中的消息列表在我的前端。

这是我的 html 索引消息显示

<ul>
  <li ng-repeat="message in messages track by $index">    
    {{message}}
  </li>
</ul>

所以,我的意图是 {{message}} 中的所有内容都得到评估,所以如果另一个用户发送 :smile: 那么微笑表情符号就会显示出来而不涉及后端.

到目前为止,我已经尝试使用 javascript 函数来评估用户输入并转换为 li 元素,但对第一条消息有效。

解决此问题的最佳方法是什么?

已编辑以反映 Sergio 的评论

Javascript 是一个很好的方法。您可以使用

循环遍历所有 li 元素
var array_of_li =  document.querySelectorAll("ul.messages li");

然后你可以用一个简单的循环来转换它们。

var array_of_li = document.querySelectorAll("ul.messages li");
for (var i = 0; i < array_of_li.length; i++) {
    convert(array_of_li[i]);
}

这里是基于emojione doc的转换代码:

function convert(li_html) {
    var input = li_html.innerHTML;
    var output = emojione.shortnameToImage(input);
    li_html.innerHTML = output;
}

我将所有这些都放在了这个 jsfiddle 中,它显示了一个漂亮的表情符号微笑。

看看他们的文档,它非常简单,没有陷阱(如果你设法正确安装它,那就是)

http://git.emojione.com/demos/jsshortnametoimage.html

<ul>
   <li ng-repeat="message in messages track by $index">    
      {{ emojione.shortnameToImage(message) }}
   </li>
</ul>

真正的 Angular 方法是自己创建一个 filter (https://docs.angularjs.org/guide/filter) or use existing https://github.com/globaldev/angular-emoji-filter。然后使用就和 {{message | emoji}}.

一样简单