I am creating a game where the first thing that needs to happen is some state is loaded in from an external JSON file - the contents of one of my directives are dependent on this data being available - because of this, I would like to delay applying the directive until after the data has loaded. I have written the following:
window.addEventListener('mythdataLoaded', function (e) { 
// Don't try to create characters until mythdata has loaded
quest.directive('character', function() {
      return {
        restrict: 'A',
        scope: {
          character: '@'
        },
        controller: 'CharacterCtrl',
        templateUrl: 'partials/character.html',
        replace: true,
        link: function(scope, element) {
          $(document).on('click', '#'+scope.character, function () {
              $('#'+scope.character+'-popup').fadeToggle();
          });
        }
      };
   });
});
// Load in myth data
var myth_data;
$.getJSON("js/mythdata_playtest.json", function(json) {
   myth_data = json;
   window.dispatchEvent(new Event('mythdataLoaded'));
});
However, it appears that my directive's link function never runs - I'm thinking this is because angular has already executed the part of it's cycle where directives are compiled/linked by the time this directive gets added. Is there some way to force angular to compile this directive after it is created? I googled around a bit, and some people suggested adding $compile to the link function for similar issues - but the link function is never run, so that doesn't work for this case. Thanks!
 
     
    