前言
前面angular-cli.json与Angular引入第三方库简单介绍了Angular中如何引入第三方库,以及Angular中使用leaflet示例。通过本篇博文你将了解并学会以下几点:
- Angular中如何引入Cesium
- 封装自己得Viewer组件
- 创建一个Angular属性型指令
- 依赖注入
Angular中引入Cesium
首先用angular/cli创建一个项目
|
|
进入项目根目录,安装所有依赖包
|
|
如有问题,参照https://543802360.github.io/2017/08/14/angular-cli/解决。
接下来安装cesium
|
|
在angular-cli中进行配置(见注释):
|
|
在mait.ts中设置 window[“CESIUM_BASE_URL”] = “/assets/cesium” ,它会引导浏览器加载cesium的各种资源文件
|
|
在typings.d.ts中声明全局变量Cesium:
|
|
以上就配置完毕了。接下来封装Viewer组件。
封装Viewer组件
使用以下命令创建一个viewer组件
|
|
viewer.component.ts,一个空组件,实现了OnInit声明周期钩子
|
|
然后再创建一个属性型指令,我们要在viewer组件的模板中使用这个属性型指令。
|
|
cesium-viewer.directive.ts源码文件:
|
|
import语句制定了从Angular的core库导入的一些库
- Directive提供了 @Directive 装饰器功能。
- ElementRef 注入到指令构造函数中,这样代码就可以访问DOM元素了。
- Input将数据从绑定表达式传达到指令中。
然后,@Directive装饰器函数以配置对象参数的形式,包含了指令的元数据。它的CSS选择器是一个标签名,如下:
|
|
@Directive元数据之后就是该指令的控制器类,名叫 CesiumViewerDirective ,它包含该指令的逻辑。然后导出 CesiumViewerDirective ,以便让它能从其他组件中访问到。
这里我声明了两个属性:
|
|
其中options使用了 @Input() 注解,接收父组件传递的参数
现在,我们要使用这个新的 CesiumViewerDirective ,我们把这个指令放到viewer.component.ts的 @Component 元数据的 template 配置项中,并绑定了options属性输入
|
|
然后我们在 ngOnInit() 钩子函数中初始化了options参数(一般不在构造函数中初始化)
|
|
我们要在 CesiumViewerDirective 中完成初始化工作:
|
|
现在我们的组件写好了,在顶级组件模板中引入即可,app.component.ts:
|
|
在app.component.css中定义样式:
|
|
最后,记得在app.module.ts中声明所有组件、指令:
|
|
现在基本完成了Angular中Cesium的入门工作,但是这里还存在着不少问题,例如,viewer肯定需要在多个组件中共享,例如将要封装的场景设置组件、图层控制组件、绘制组件等等,这就需要使用依赖注入,将viewer的初始化工作交给服务去做,然后在整个app中共享这一服务。
附录
源码中,已经解决了上面的问题,后续也将封装其他常用的组件
示例地址:https://543802360.github.io/demo/ng-zorro-cesium
源码:https://github.com/543802360/Angular_learning/tree/master/ng-zorro-cesium