这是将 Disqus 嵌入 Angular2 组件的正确方法吗?
Is this the right way to embed Disqus in Angular2 component?
是否正确完成以下操作以将 Disqus 嵌入 Angular2 组件
disqus.component.html
<div class="card card-block">
<div id="disqus_thread"></div>
<noscript>
Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a>
</noscript>
</div>
--
disqus.component.ts
//Above code omitted for simplicity
export class DisqusComponent {
ngOnInit(){
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = '//blahblahblahdafsfawf.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
}
}
您可以使用 DISQUS.reset 功能更新评论部分的页面详细信息,而不必每次都加载 embed.js。那就是您可以按照 Eric Martinez 的建议只添加一次脚本。
更新:最简单的方法是使用这个 DisqusModule
,您可以从 npm check Live Demo
安装
如果你还想自己写,这个组件就可以了
import {Component, Input, ElementRef, OnInit, Renderer2} from '@angular/core';
@Component({
selector: 'disqus',
template: '<div id="disqus_thread"></div>',
})
export class Disqus implements OnInit{
@Input() public identifier:string;
@Input() public shortname:string;
constructor(private el:ElementRef, private renderer:Renderer2) {
this.dom = el.nativeElement;
}
ngOnInit() {
if ((<any>window).DISQUS === undefined) {
this.addScriptTag();
}
else {
this.reset();
}
}
/**
* Reset Disqus with new information.
*/
reset() {
(<any>window).DISQUS.reset({
reload: true,
config: this.getConfig()
});
}
/**
* Add the Disqus script to the document.
*/
addScriptTag() {
(<any>window).disqus_config = this.getConfig();
let script = this.renderer.createElement(this.el.nativeElement, 'script');
script.src = `//${this.shortname}.disqus.com/embed.js`;
script.async = true;
script.type = 'text/javascript';
script.setAttribute('data-timestamp', new Date().getTime().toString());
}
/**
* Get Disqus config
*/
getConfig() {
let _self = this;
return function () {
this.page.url = window.location.href;
this.page.identifier = _self.identifier;
this.language = 'en';
};
}
}
是否正确完成以下操作以将 Disqus 嵌入 Angular2 组件
disqus.component.html
<div class="card card-block">
<div id="disqus_thread"></div>
<noscript>
Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a>
</noscript>
</div>
--
disqus.component.ts
//Above code omitted for simplicity
export class DisqusComponent {
ngOnInit(){
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = '//blahblahblahdafsfawf.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
}
}
您可以使用 DISQUS.reset 功能更新评论部分的页面详细信息,而不必每次都加载 embed.js。那就是您可以按照 Eric Martinez 的建议只添加一次脚本。
更新:最简单的方法是使用这个 DisqusModule
,您可以从 npm check Live Demo
如果你还想自己写,这个组件就可以了
import {Component, Input, ElementRef, OnInit, Renderer2} from '@angular/core';
@Component({
selector: 'disqus',
template: '<div id="disqus_thread"></div>',
})
export class Disqus implements OnInit{
@Input() public identifier:string;
@Input() public shortname:string;
constructor(private el:ElementRef, private renderer:Renderer2) {
this.dom = el.nativeElement;
}
ngOnInit() {
if ((<any>window).DISQUS === undefined) {
this.addScriptTag();
}
else {
this.reset();
}
}
/**
* Reset Disqus with new information.
*/
reset() {
(<any>window).DISQUS.reset({
reload: true,
config: this.getConfig()
});
}
/**
* Add the Disqus script to the document.
*/
addScriptTag() {
(<any>window).disqus_config = this.getConfig();
let script = this.renderer.createElement(this.el.nativeElement, 'script');
script.src = `//${this.shortname}.disqus.com/embed.js`;
script.async = true;
script.type = 'text/javascript';
script.setAttribute('data-timestamp', new Date().getTime().toString());
}
/**
* Get Disqus config
*/
getConfig() {
let _self = this;
return function () {
this.page.url = window.location.href;
this.page.identifier = _self.identifier;
this.language = 'en';
};
}
}