【发布时间】:2013-04-04 22:48:11
【问题描述】:
在单页应用程序中使用 Disqus 的最佳方法是什么? 我看到 angular js 文档已经成功实现了。
目前我们的方法在我们的 AngularJS 应用程序中看起来像这样,但它似乎不稳定,难以测试,并且加载了错误的线程 ID(几乎所有地方都加载了相同的线程)。
'use strict';
angular.module('studentportalenApp.components')
.directive('disqusComponent',['$log', '$rootScope', function($log, $rootScope) {
var _initDisqus = function _initDisqus(attrs)
{
if(window.DISQUS) {
DISQUS.reset({
reload: true,
config: function () {
this.page.identifier = attrs.threadId;
this.disqus_container_id = 'disqus_thread';
this.page.url = attrs.permalinkUrl;
}
});
}
else
{
$log.error('window.DISQUS did not exist before directive was loaded.');
}
}
//Destroy DISQUS bindings just before route change, to properly dispose of listeners and frame (postMessage nullpointer exception)
$rootScope.$on('$routeChangeStart', function() {
if(window.DISQUS) {
DISQUS.reset();
}
});
var _linkFn = function link(scope, element, attrs) {
_initDisqus(attrs);
}
return {
replace: true,
template: '<div id="disqus_thread"></div>',
link: _linkFn
};
}]);
【问题讨论】:
标签: unit-testing angularjs disqus angularjs-directive single-page-application