我正在学习Angular JS,目前正在做一个聊天应用程序,我想将Emojione提供的Javascript转换.shortnameToImage(str)
应用到我前端聊天应用程序中的消息列表中。
这是我的html索引上的消息显示
<ul>
<li ng-repeat="message in messages track by $index">
{{message}}
</li>
</ul>
因此,我的意图是对{{message}}
中的所有内容进行评估,因此如果另一个用户发送:微笑:,那么微笑表情符号就会显示出来,而不会涉及后端。
到目前为止,我已经尝试使用一个javascript函数,该函数评估用户输入并转换为li
元素,但对第一条消息有效。
我能采取什么样的最佳方法来解决这个问题?
真正的Angular方法是自己创建一个filter
(https://docs.angularjs.org/guide/filter)或使用现有https://github.com/globaldev/angular-emoji-filter.然后使用就会像{{message | emoji}}
一样简单。
编辑以反映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]);
}
这是基于表情符号文档的转换代码:
function convert(li_html) {
var input = li_html.innerHTML;
var output = emojione.shortnameToImage(input);
li_html.innerHTML = output;
}
我把所有这些都放在了这个jsfiddle中,它展示了一个漂亮的表情符号微笑。
查看他们的文档,它非常简单,并且没有gotchas(如果您成功地正确安装了它,也就是说)
http://git.emojione.com/demos/jsshortnametoimage.html
<ul>
<li ng-repeat="message in messages track by $index">
{{ emojione.shortnameToImage(message) }}
</li>
</ul>