我只能在使用Angular2 Universal的客户端中运行组件方法吗
Can I run a component method only in the client using Angular2 Universal?
我正在编写一个angular2通用应用程序。它有一个d3图表,但我希望只在客户端(浏览器)上呈现d3图表而不尝试在服务器上呈现。angular2 universal中是否存在只在客户端运行组件方法的接口?
即
class ComponentWithChart implements OnInit, ngUniversalBrowser {
elem;
constructor( private viewContainerRef:ViewContainerRef) {}
ngUniversalBrowserOnInit() {
this.elem = this.viewContainerRef.element.nativeElement;
d3.select(this.elem).append('div').style({
'background-color':'yellow'
});
}
}
有没有像上面的例子一样的东西可以让我只在浏览器OnInit
中运行ngUniversalBrowser
方法?
import { isBrowser } from 'angular2-universal';
isBrowser是一个布尔值,您可以在组件中导入它,然后仅当它在客户端上运行时才能执行代码。
if (isBrowser) {
// this will not run on server
}
我想我得到了答案。但这完全是一次黑客攻击,我相信他们并没有打算让你这么做。
我自己也陷入了死胡同(这迫使我关闭了角度通用/预渲染)。我的损失可能就是你的收获。
有些特定对象在预渲染时不可用。主要是"窗口",即"文档.窗口"。
为什么不尝试在组件中添加一个条件语句来检查对象是否存在呢。如果没有,请加载黄色背景。否则,正常加载。
我不确定这是否意味着当"真正的"客户端完成加载时,您的组件将无法刷新。但我相信你们可以为"窗口"设置一些监视并使其发生。
ngInit() {
if (!window) {
// yellow background placeholder
} else
// real plumbing
}
}
相关文章:
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- MobileFirst:在客户端运行计时器作业-最佳选项
- 使用浏览器在页面(客户端)上运行自定义JavaScript来模拟点击?怎么做
- 区分客户端运行的是OSX还是Windows
- 在客户端 Javascript 方法之后运行服务器方法
- AngularJS这样的开源Javascript是如何在客户端浏览器上运行的
- 仅当客户端连接到Meteor服务器时才运行代码
- 为什么可以't我得到连接客户端's的ip地址在我的服务器上运行Node.js+Openshift托管的W
- 假设:Meteor.call()首先尝试在客户端环境中运行,这是真的吗
- C#/ASP-web,ASP:在客户端执行复选框消息框,如果是,则运行服务器端代码
- 如何重新运行Meteor出版物以刷新客户端上收藏的内容
- 如何处理客户端运行的 JavaScript 中的意外值
- 由服务器初始化然后由客户端运行的时钟已延迟
- 如何使用Node.js在客户端运行可执行文件
- 使用AJAX将客户端运行时间记录到服务器日志文件中
- 从aspx.cs在客户端运行Windows应用程序
- 我如何在NodeJS应用程序的服务器端使用javascript库,当它被设计为在客户端运行时
- 从客户端运行的脚本更新服务器上的javascript变量
- 在 JavaScript 中加载表单数据并在客户端运行一些东西
- 通过独立浏览器客户端运行的实习生错过了这一点.远程套房