目前正在开发自己的网站,技术上使用Angular JS + Express JS + Mongo DB。由于网站会有文章发布,因此需要有评论功能。评论功能也可以自己开发,但由于现在社会化评论插件很多,因此没有必要多花精力,使用专业的就好。
1. 什么是社会化评论插件?都有哪些常用的插件?
社会化评论插件,指的就是无需自己开发评论功能,在自己网页上使用第三方的评论框,发出的评论将被保存在第三方的服务器上。使用时要在插件提供方官网上注册,注册好之后可获取实现功能的JS代码,以及将来可在官网上管理自己网站的评论。
实现的原理,一般都是插件网站提供给你一段JS代码,你插入到需要评论的网页上即可。
目前常用的评论插件有:
A. Disqus
这个应该是最老的,在国外使用最多的第三方评论插件。优点是老牌专业,通过JS代码可发现,国内很多网站的功能实现应该是参考了它。但缺点同样明显,就是国内的网站使用,访问速度个人感觉往往不好,加载有些慢。另外对国内的社交网站支持不好,仅支持Facebook,Twitter等,不支持微博等,这对访客的评论带来不便。
并且i18n对中文的支持不好,网站上提供了中文版选项(它是依赖网友们的贡献提供多语言版本),但是我试了发现不能起作用。
因此考虑到以上缺点,我放弃了它。
B. 多说
它和有言应该是国内使用较多的评论插件。优点是使用很方便,支持微博等国内社交网站账户登录。但缺点是使用过程中我感觉它的Bug还是不少,同时在其网站讨论版中,可以看到,提出问题的网友很多也很活跃。比如我发现了一个严重的问题,也有一些网友提出,就是有时候必须手动再刷新一次页面,才能显示评论框。这个问题后来采用了它的动态加载方式才得以解决。
经过对比,比较,我最后选择的就是多说。
C. 有言
和多说很像,我没有使用它的原因是,发现在使用时它会抛出Javascript error,导致评论框不能显示。因此多次调试没有解决问题后,我选择了放弃。
2. 如何在Angular JS中正确使用评论插件?
这里我还有一个需求,就是每篇文章都能讲评论区分开,也就是每篇文章显示自己的评论,评论不能串,或都显示一样。针对这个功能,其实每种插件都会提供线程Thread的概念,这个功能是指针对不同Thread ID的页面加载不同的评论。
以多说为例。
这里使用的是多说插件的动态加载方式,标准代码可参见官网:http://dev.duoshuo.com/docs/50b344447f32d30066000147。
在标准代码中,有一个通用的Javascript方法,如果我有多个页面,那么这段代码就需要复制多次。但在Angular JS中没有必要,Angular JS提供了Directive,即自定义标签的功能,可定义一个directive,在每个页面引用即可。
directive.js
myApp.directive("comment", function() {
return {
restrict: 'A',
link: function(scope){
// get the variable from controller
var article_id = scope.article_id; var data_thread_key = 'article_' + article_id;
var data_url = 'article_' + article_id;
var data_author_key = 'http://blogtest.com/#!/article.html/' + article_id; // dynamic load the duoshuo comment box
var el = document.createElement('div');//该div不需要设置class="ds-thread"
el.setAttribute('data-thread-key', data_thread_key);//必选参数
el.setAttribute('data-url', data_url);//必选参数
el.setAttribute('data-author-key', data_author_key);//可选参数
DUOSHUO.EmbedThread(el);
jQuery('#comment-box').append(el);
}
};
});
在这里我用每篇文章的article id来做评论插件的thread id,保证每篇文章的评论都分开。同时使用Directive的另一个好处是,directive里的JS方法,可以访问controller中的scope变量,如果你是和我一样在controller动态获取文章,那么就很方便在directive中拿到文章ID。
page.html
<div id="comment-box"></div>
<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日
【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑的更多相关文章
-
dropload.js(上拉加载插件使用过程中遇到的坑)
dropload.js相关介绍和使用以及demo下载详见:https://github.com/ximan/dropload (原文出处) 之前因为项目需要一个上拉加载的效果,然后无意中看到了此插件, ...
-
[RN] React Native 使用 图片预览和放大 插件 react-native-image-zoom-viewer 过程中,放大报错问题
React Native 使用 图片预览和放大 插件 react-native-image-zoom-viewer 过程中,放大报错问题 报错如下: Cannot record touch end w ...
-
使用nagios插件 check_mysql_health 过程中遇到的error
使用nagios插件 check_mysql_health 过程中遇到的error 1.如果在运行监控mysql插件的时候遇到了error安装以下依赖包就可以解决: yum install perl- ...
-
WordPress社会化评论插件多说、有言、灯鹭、评论啦
社会化登录是指网站的用户通过使用QQ.人人网.腾讯微博.新浪微博等社会化媒体账号登录该网站,并让用户能够使用社会化媒体账号进行允许的操作,如评论.分享等.经过简单的代码整合,社会化媒体账号可以在第三方 ...
-
blog 社会化评论插件 多说for china, disqus for global range
1.disqus https://disqus.com/ https://publishers.disqus.com/engage https://disqus.com/admin/create/ h ...
-
全屏使用swiper.js过程中遇到的坑
概述 swiper.js确实是一个很好用的插件,下面记录下我在全屏使用过程中遇到的一些坑和解决办法,供以后开发时参考,相信对其他人也有用. 通用方案 一般来说,swiper需要放在body的下一层,虽 ...
-
学习Nodejs:《Node.js开发指南》微博项目express2迁移至express4过程中填的坑
<Node.js开发指南>项目地址https://github.com/BYVoid/microblog好不容易找到的基础版教程,但书中是基于express2的,而现在用的是express ...
-
Angular JS的Placeholder功能在IE8/9浏览器中不可用
附上如下代码可正常工作: .directive('placeholder', function($timeout){ var i = document.createElement('input'); ...
-
maven插件运行过程中自动执行sql文件
配置pom.propertis即可 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId> ...
随机推荐
-
Servlet/JSP-06 Session
一. 概述 Session 指客户端(浏览器)与服务器端之间保持状态的解决方案,有时候也用来指这种解决方案的存储结构. 当服务器端程序要为客户端的请求创建一个 Session 时,会首先检查这个请求里 ...
-
ES6转码器babel的使用
1. 进入ES6的项目,执行 npm init // 初始化package.json 2. 在与package.json同一目录下编写配置文件 .babelrc { "presets&quo ...
-
高质量的javascript代码 -- 深入理解Javascript
一. 编写高质量的javascript代码基本要点a) 可维护的代码(Writing Maintainable Code)i. 可读(注释)ii. 一致(看上去是同一个人写的)iii. 已记录b) 最 ...
-
ALAsset和ALAssetRepresentation
ALAsset类代表相册中的每个资源文件,可以通过它获取资源文件的相关信息还能修改和新建资源文件,ALAssetRepresentation类代表相册中每个资源文件的详细信息,可以通过它获取资源的大小 ...
-
linux清理僵尸进程
查看服务器时发现好3个僵尸进程,僵尸进程存在好多天了,一直不会处理,留到了今天,顺便清理下僵尸进程吧 top命令中统计了僵尸进程,是第二行最后一项3 zombie. 或者使用下面的命令得到僵尸进程数量 ...
-
更好的抽屉效果(ios)
昨天项目基本没啥事了,晚上早早的就回家了,躺在床上无聊地玩着手机(Android的),在清理系统垃圾时被一个“360手机助手”给吸引了, 其实我是被它的那个抽屉效果给吸引了,此时你也许会觉得我out了 ...
-
51Nod 1090 3个数和为0 set 二分优化
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...
-
leetcode刷题七<;整数反转>;
给出一个 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 : 输入: 输出: 示例 : 输入: - 输出: - 示例 : 输入: 输出: 假设我们的环境只能存储得下 32 位的有符号整 ...
-
学界 | Yann LeCun新作,中日韩文本分类到底要用哪种编码?
https://www.wxwenku.com/d/102093756 AI科技评论按:前几天,Yann LeCun与其学生 张翔在arXiv上发表了一篇新作「Which Encoding is th ...
-
[Spring Data Repositories]学习笔记--为repository添加通用的方法
如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1 ...