var app = angular.module('app', []);

app.directive('someDirective', ['$log', 'someService', function($log, someService){
  return {
    restrict: 'E',
    controllerAs: 'someDirective',
    controller: function($scope, $element){
      var vm = this;
      
      vm.init = function init(data){
        var config = data.data;
        Cesium.BingMapsApi.defaultKey = config.bingAPIKey;
        var viewer = new Cesium.Viewer($element[0]);
      }
      
      someService.getConfig().then(vm.init);
      
    }
  }
}]);

app.service('someService', ['$q', '$log', '$http', function($q, $log, $http){
  var myService = {
    getConfig: function getConfig(){
      return $http.get('config.json').
        success(function(data, status, headers, config) {
          appData = data;
        }).
        error(function(data, status, headers, config) {
          // log error
        });
    }
  }
  
  return myService;
}]);

app.controller('MainCtrl', ['$scope', 'someService', function ($scope, someService) {
  
  var vm = this;
}]);
.grid {
  width: 600px;
}

.hovered{
  outline: red 2px solid;
}
<!doctype html>
<html ng-app="app">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.js"></script>
    <script src="https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js"></script>
    <link rel="stylesheet" href="https://cesiumjs.org/releases/1.21/Build/Cesium/Widgets/widgets.css" type="text/css">
    <link rel="stylesheet" href="main.css" type="text/css">
    
  </head>
  <body>

<div ng-controller="MainCtrl as ctrl">
  <some-directive></some-directive>
</div>


    <script src="app.js"></script>
  </body>
</html>
{
  "bingAPIKey": "AroazdWsTmTcIx4ZE3SIicDXX00yEp9vuRZyn6pagjyjgS-VdRBfBNAVkvrucbqr",
  "mapUrl": null
}