Grafana 二次开发指南(前端)
    
  前端项目
启动流程
- 页面载入之后,引入的脚本是 boot.js,由 es2015 的 shim,systemjs,systemjs 的配置文件和 boot.js 组成。
- 执行 boot。设定 cache 时间,import app/app.js,执行 init 函数。
- init 过程,生成 GrafanaAPP。
- 从 app/core/config引入配置参数,实际配置参数是app/core/settings.js。
- 定义依赖,ngModuleDependencies(第三方模块),核心模块 app/core/core(controller, directive…),功能模块(’app/features/all’)
- Systemjs 加载所有功能模块之后,向模块里注入providers。
 
- angular app 的初始设置由后端直接渲染到页面中,页面文件 public/views/index.html,参数是window.grafanaBootData。
- app 启动时会自动加载所有在 app/featrures/all.js中声明过的模块,所以如果有新的功能模块,确保它最终在该文件中声明了。
开发说明
- app/core/utils/kbn.js是各类格式化函数。
- 如何定义模块
- typescript 编写的模块按照 ES2015 的模块化语法编写。
- JavaScript 编写的模块按照 AMD 格式定义。依赖会自动注入。root 目录是 public。
 
- 引入新的第三方模块。
- 可以直接放入 public 下的 vendor 目录,然后在 app/system.conf.js中加入定义,之后可以直接通过模块名加载。
 
- 如果是 angular 的模块,在 app/app.ts中的ngModuleDependencies数组中加入模块名来加载它。
数据
- dashboard controller 初始化完成之后,会通过 dashboardSrv 创建新的 dashboard 数据对象,然后在 dashboard_ctrl 的 setupDashboardInternal 方法中初始化各个注册的模块。
- 如果你添加了新的功能模块,需要依赖 dashboard 数据,可以在 dashboard_ctrl 中注入 service 方法,然后在 setupDashboardInternal 进行 init 动作。
- 所有需要持久化的数据都挂载在 dashboard 数据对象下,如果有新的需要持久化的数据,可以挂载在 dashboard 数据对象下,注意避免 key 的冲突。每次用户保存 dashboard 的时候,dashboard 数据对象就会提交到后端保存。