前言
前面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
 
		 
                      