diff --git a/public/app/features/annotations/annotations_srv.ts b/public/app/features/annotations/annotations_srv.ts index 19850da52d9..4fe6e10b2cf 100644 --- a/public/app/features/annotations/annotations_srv.ts +++ b/public/app/features/annotations/annotations_srv.ts @@ -1,25 +1,32 @@ -import './editor_ctrl'; - +// Libaries import angular from 'angular'; import _ from 'lodash'; + +// Components +import './editor_ctrl'; import coreModule from 'app/core/core_module'; + +// Utils & Services import { makeRegions, dedupAnnotations } from './events_processing'; +// Types +import { DashboardModel } from '../dashboard/dashboard_model'; + export class AnnotationsSrv { globalAnnotationsPromise: any; alertStatesPromise: any; datasourcePromises: any; /** @ngInject */ - constructor(private $rootScope, private $q, private datasourceSrv, private backendSrv, private timeSrv) { - $rootScope.onAppEvent('refresh', this.clearCache.bind(this), $rootScope); - $rootScope.onAppEvent('dashboard-initialized', this.clearCache.bind(this), $rootScope); - } + constructor(private $rootScope, private $q, private datasourceSrv, private backendSrv, private timeSrv) {} - clearCache() { - this.globalAnnotationsPromise = null; - this.alertStatesPromise = null; - this.datasourcePromises = null; + init(dashboard: DashboardModel) { + // clear promises on refresh events + dashboard.on('refresh', () => { + this.globalAnnotationsPromise = null; + this.alertStatesPromise = null; + this.datasourcePromises = null; + }); } getAnnotations(options) { diff --git a/public/app/features/dashboard/dashboard_ctrl.ts b/public/app/features/dashboard/dashboard_ctrl.ts index c34b9ddaff2..5871a579f3c 100644 --- a/public/app/features/dashboard/dashboard_ctrl.ts +++ b/public/app/features/dashboard/dashboard_ctrl.ts @@ -1,6 +1,12 @@ +// Utils import config from 'app/core/config'; - +import appEvents from 'app/core/app_events'; import coreModule from 'app/core/core_module'; + +// Services +import { AnnotationsSrv } from '../annotations/annotations_srv'; + +// Types import { DashboardModel } from './dashboard_model'; import { PanelModel } from './panel_model'; @@ -21,6 +27,7 @@ export class DashboardCtrl { private dashboardSrv, private unsavedChangesSrv, private dashboardViewStateSrv, + private annotationsSrv: AnnotationsSrv, public playlistSrv ) { // temp hack due to way dashboards are loaded @@ -49,6 +56,7 @@ export class DashboardCtrl { // init services this.timeSrv.init(dashboard); this.alertingSrv.init(dashboard, data.alerts); + this.annotationsSrv.init(dashboard); // template values service needs to initialize completely before // the rest of the dashboard can load @@ -72,7 +80,7 @@ export class DashboardCtrl { this.keybindingSrv.setupDashboardBindings(this.$scope, dashboard); this.setWindowTitleAndTheme(); - this.$scope.appEvent('dashboard-initialized', dashboard); + appEvents.emit('dashboard-initialized', dashboard); }) .catch(this.onInitFailed.bind(this, 'Dashboard init failed', true)); } diff --git a/public/app/features/panel/solo_panel_ctrl.ts b/public/app/features/panel/solo_panel_ctrl.ts index 15d35188d6d..a8bf5371913 100644 --- a/public/app/features/panel/solo_panel_ctrl.ts +++ b/public/app/features/panel/solo_panel_ctrl.ts @@ -14,7 +14,7 @@ export class SoloPanelCtrl { const params = $location.search(); panelId = parseInt(params.panelId, 10); - $scope.onAppEvent('dashboard-initialized', $scope.initPanelScope); + appEvents.on('dashboard-initialized', $scope.initPanelScope); // if no uid, redirect to new route based on slug if (!($routeParams.type === 'script' || $routeParams.type === 'snapshot') && !$routeParams.uid) {