接着上篇,继续介绍 如何编写一个组件、组件间如何通行,如何解决组件通信的一些硬伤,最终如何结合arcgis js api建立一个vue项目传送门:
Vue + ArcGIS API for JavaScript 构建前端GIS应用(一)
Vue + ArcGIS API for JavaScript 构建前端GIS应用(二)
Vue + ArcGIS API for JavaScript 构建前端GIS应用(三)htmlp.s.:
配合示例代码服用效果更佳示例代码:https://github.com/GlennLuo19...前端
示例代码: https://github.com/GlennLuo19...
如何去编写一个单文件组件呢?下面使用一个简单的案例进行说明。
该组件包括一个状态count用于计数,两个按钮分别增长与减小count。vue
首先,咱们要作的是组件视图层的编写,很简单的3个标签,1个div、2个buttonnode
这样逻辑就完成了。方法直接操做状态,状态一旦更新,vue随即响应,对dom进行更新。
除此以外还有component、props、computed选项,在这就不作介绍了。webpack
下面介绍一下重要的概念,生命周期钩子函数。git
仍然用刚刚的例子去看一下生命周期钩子怎么用:
如今组件使用了created、mounted、updated三个经常使用的生命周期钩子函数,他们分别在组件建立好时执行、在组件装在完毕后执行、在组件状态更新后执行。效果请看例子。github
咱们使用生命周期能够实现一些逻辑。好比组件与后台的通讯获取初始化数据就能够在mounted函数里面进行。web
https://github.com/GlennLuo19...
某一个独立的组件很难实现一个比较完整的业务逻辑,所以组件间的通讯是不能避免的。
下面就用一个例子说明父子组件之间是如何互相传值的。
首先介绍一下例子代码的结构:vuex
两种方式是不一样的: 父组件向子组件传值是主动式的;子向父是被动式的。vue-cli
可是问题来了:兄弟组件如何通讯?多层级组件之间怎么通讯?
vue的生态系统能够帮助解决以这个问题。
前面说到过,vue是一个是渐进式框架,仅仅依靠上面介绍的vue核心库很难知足一个工程项目建设的须要,同时vue原生存在的问题如:组件间通讯困难的问题难以解决。可是在vue生态系统的帮助下,让vue有能力建立一个工程应用。在这里只是对vue生态的内容进行简单的介绍,具体什么时候使用?怎么使用?会在后面的案例中进行演示。
浏览器插件,便于在开发中使用。
Webapck中的一个loader,用于转译.vue文件,让单页组件可用。若是是想用webpack手工进行vue工程项目配置的话,这个loader是必不可少的。
经过Vue Cli能够帮助快速开发一个vue工程项目。提供vue-cli能够交互式的、快速的搭建一个项目的脚手架。它是基于 webpack 构建,并带有合理的默认配置,减小配置时间,绕过webpack这个坑。一个丰富的官方插件集合,集成了前端生态中最好的工具。
控制vue的路由。
状态管理机,构建全局状态和局部状态,解决组件间通讯问题。
node.js
npm or yarn
VSCode、Webstorm
介绍一下适合vue前端开发的vscode插件
方案:使用webpack进行vue环境配置;这里就能够应用前面谈主任提到的现代前端工具链在webpack基础上进行项目的配置,可是配置过程繁杂须要丰富的经验,容易遇到坑,影响项目启动的进度。
简化方案:使用vue生态中的vue-cli构建项目(重点介绍,并进行演示,包括使用控制台指令进行建立和使用可视化界面vue ui进行建立);
示例代码: https://github.com/GlennLuo19...
咱们不能在用npm安装arcgis api后直接用import的形式引用api到项目里来,由于咱们的项目是es模式的模块化规范,而arcgis api是基于Dojo框架下AMD模式创建的。因此,想要在咱们的项目中使用arcgis就必须借助其余的工具,这个工具就是esri-loader。
综合案例:vue + vue-cli + vuex + vue router + esri-loader技术栈
先来看一下项目的文件结构:
从mainjs看起,这声明了一个vue实例,启用了初始化vuex和vue router,并把应用级组件app挂在html模版id是app的div上。
在app组件是一个应用的总体框架。这里有两个router-link标签,进行前端路由的跳转。router-view等因而一个占位符,表示的是某个路由对应的组件。
在router.js里面咱们能够看到/对应的是Home组件;/map对应的是MyMap组件。懒加载。
当咱们进行路由跳转时,就能够进行组件的切换。
Home组件咱们就不介绍了;重点介绍一下myMap组件
myMap里面注册两个组件:map和mapControl
在map组件里面咱们启用esri-loader,在钩子函数mounted也就是在组件装载成功后进行arcgis api map类和view类的初始化。
在最后咱们使用了initMap以及initView这两个函数,这两个是vuex中定义的mutation。
一个store最重要的就是state、mutation、actions这像个选项:
该项目声明了3个状态:
mutation里面写个两个函数
initMap:也就是将在map组件里面实例化的map对state中的map进行初始化
initView:与map相似,就是初始化view
当这两个对象被vuex管理以后,应用里的全部组件均可以调用vuex中的mutation或者action方法加上本身的参数对地图对象进行操做了
这里在action中写了两个方法增长图层和删除全部图层。
回到mapControl组件,咱们使用的mapActions方法把vuex中的两个actions引用到组件里面,分别挂在了两个按钮的单击事件上。还能够看到咱们还将vuex中的layerCount状态绑定到了组件的标签上,它跟data同样能够响应式渲染。
webGIS通常是以地图为核心,咱们能够将地图对象等交给vuex进行管理,对于地图的操做逻辑也能够分离出来写在vuex中。对于其余的一些应用级别的对象也是如此。
这样咱们就能够避免了大部分的通讯问题。
最后进行一点补充:
咱们结合一些热门UI框架如element UI或者ant design能够帮我建立更好看的、交互性更好的webGIS应用。