【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑

  目前正在开发自己的网站,技术上使用Angular JS + Express JS + Mongo DB。由于网站会有文章发布,因此需要有评论功能。评论功能也可以自己开发,但由于现在社会化评论插件很多,因此没有必要多花精力,使用专业的就好。

1. 什么是社会化评论插件?都有哪些常用的插件?

  社会化评论插件,指的就是无需自己开发评论功能,在自己网页上使用第三方的评论框,发出的评论将被保存在第三方的服务器上。使用时要在插件提供方官网上注册,注册好之后可获取实现功能的JS代码,以及将来可在官网上管理自己网站的评论。

  实现的原理,一般都是插件网站提供给你一段JS代码,你插入到需要评论的网页上即可。

  目前常用的评论插件有:

A. Disqus

  官网:https://disqus.com/

  这个应该是最老的,在国外使用最多的第三方评论插件。优点是老牌专业,通过JS代码可发现,国内很多网站的功能实现应该是参考了它。但缺点同样明显,就是国内的网站使用,访问速度个人感觉往往不好,加载有些慢。另外对国内的社交网站支持不好,仅支持Facebook,Twitter等,不支持微博等,这对访客的评论带来不便。

  并且i18n对中文的支持不好,网站上提供了中文版选项(它是依赖网友们的贡献提供多语言版本),但是我试了发现不能起作用。

  因此考虑到以上缺点,我放弃了它。

B. 多说

  官网:http://duoshuo.com/

  它和有言应该是国内使用较多的评论插件。优点是使用很方便,支持微博等国内社交网站账户登录。但缺点是使用过程中我感觉它的Bug还是不少,同时在其网站讨论版中,可以看到,提出问题的网友很多也很活跃。比如我发现了一个严重的问题,也有一些网友提出,就是有时候必须手动再刷新一次页面,才能显示评论框。这个问题后来采用了它的动态加载方式才得以解决。

  经过对比,比较,我最后选择的就是多说。

C. 有言

  官网:http://www.uyan.cc/

  和多说很像,我没有使用它的原因是,发现在使用时它会抛出Javascript error,导致评论框不能显示。因此多次调试没有解决问题后,我选择了放弃。

2. 如何在Angular JS中正确使用评论插件?

这里我还有一个需求,就是每篇文章都能讲评论区分开,也就是每篇文章显示自己的评论,评论不能串,或都显示一样。针对这个功能,其实每种插件都会提供线程Thread的概念,这个功能是指针对不同Thread ID的页面加载不同的评论。

  以多说为例。

  这里使用的是多说插件的动态加载方式,标准代码可参见官网:http://dev.duoshuo.com/docs/50b344447f32d30066000147。

  在标准代码中,有一个通用的Javascript方法,如果我有多个页面,那么这段代码就需要复制多次。但在Angular JS中没有必要,Angular JS提供了Directive,即自定义标签的功能,可定义一个directive,在每个页面引用即可。

directive.js

 1 myApp.directive("comment", function() {
 2     return {
 3         restrict: 'A',
 4         link: function(scope){
 5             // get the variable from controller
 6             var article_id = scope.article_id;
 7             
 8             var data_thread_key = 'article_' + article_id;
 9             var data_url = 'article_' + article_id;
10             var data_author_key = 'http://blogtest.com/#!/article.html/' + article_id;
11             
12             // dynamic load the duoshuo comment box
13             var el = document.createElement('div');//该div不需要设置class="ds-thread"
14             el.setAttribute('data-thread-key', data_thread_key);//必选参数
15             el.setAttribute('data-url', data_url);//必选参数
16             el.setAttribute('data-author-key', data_author_key);//可选参数
17             DUOSHUO.EmbedThread(el);
18             jQuery('#comment-box').append(el);
19         }
20     };
21 });

  在这里我用每篇文章的article id来做评论插件的thread id,保证每篇文章的评论都分开。同时使用Directive的另一个好处是,directive里的JS方法,可以访问controller中的scope变量,如果你是和我一样在controller动态获取文章,那么就很方便在directive中拿到文章ID。

page.html

1 <div id="comment-box"></div> 
2 <div comment></div>

  在html页面中两行代码就足够了。comment就是指我们自定义的Directive插件。

  由此可以看到评论插件的效果如下:

3. 小结

  在使用与选择各种评论插件的过程中,自己走了很多坑。总结如下:

  1. 不同插件的产品质量不同,需要测试来发现与选择,有的知名产品但对你来说,效果很差,当然可能有你的问题。

  2. 不同插件对不同页面不同评论的支持不同,有的支持好,有的支持不好。像disqus,和多说支持就较好。

  3. Angular JS和插件组合使用时可能也有坑。在解决问题过程中,也可以加深对Angular JS的理解。

  希望对你有帮助。谢谢。

  我已经将自己的小网站开源,完整代码可参见:https://github.com/kevinsong1990/nodejs-blog

                                           - Kevin Song

                                           2015年8月2日 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小文博客

SSTap-享受游戏! ——SSTap下载地址及使用教程(内附免费版配置)

3.1K2
来自专栏Java技术

秒杀系统的技术挑战、应对策略以及架构设计总结一二!

秒杀是电商常见的一种营销手段:将少量的商品,以极低的价格,在特定的时间点开始出售,网站通过这种营销手段,制造某种轰动效应,从而达到网站推广的目的,秒杀虽然对网站...

832
来自专栏IT笔记

Lepus搭建企业级数据库全方位监控系统

Lepus(天兔)数据库企业监控系统是一套由专业DBA针对互联网企业开发的一款专业、强大的企业数据库监控管理系统,企业通过Lepus可以对数据库的实时健康和各种...

1085
来自专栏python开发者

"过期不候"--具备生命周期的数据的技术实现方案

"过期不候"--具备生命周期的数据的技术实现方案 1   引言 本文可以作为之前的一个 原理性文章 对应的 技术实现部分 。 此处给出其上文的直达电梯: htt...

2075
来自专栏日常学python

今天说说反爬虫与反反爬虫

这是我的第五篇原创文章 喜欢爬虫的伙伴都知道,在爬网站的内容的时候并不是一爬就可以了,有时候就会遇到一些网站的反爬虫,折回让你爬不到数据,给你返回一些404,4...

4097
来自专栏知晓程序

微信全面调整分享能力:开发者应该注意什么?

1495
来自专栏Linyb极客之路

理解分布式系统中的缓存架构(下)

承接上一篇《理解分布式系统中的缓存架构(上)》,介绍了大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景,本文主要介绍缓存架构设计常见问题以及解决方案,...

721
来自专栏魏琼东

DotNET企业架构应用实践-系统架构与性能-缓存技术与ORM中的缓存查询技术

系列回顾       在前面的文章DotNET企业架构应用实践-系统架构与性能-理论依据及相关做法一文中我介绍了系统性能优化的理论做了一个概括的介绍,也简单的介...

2087
来自专栏马哥教育

Linux快速入门教程-进程管理ipcs命令学习

使用Linux系统必备的技能之一就是Linux进程管理,系统运行的过程正是无数进程在运行的过程。这些进程的运行需要占用系统的内存等资源,做好系统进程的管理,对于...

4257
来自专栏老司机的技术博客

MQTT学习笔记

MQTT是一个C/S架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限...

1432

扫码关注云+社区