8

Я пытаюсь скомпилировать дирекцию через угловое обслуживание, но, к сожалению, это не работает. Идея состоит в том, чтобы показывать ошибки во всплывающих окнах.Скомпилировать директивы через службу в angularjs

Я изменил $ ExceptionHandler услуги:

crm.factory('$exceptionHandler', function(popup) { 
    return function(exception) { 
     popup.open({message: exception}); 
    } 
}); 

всплывающую обслуживание выглядит следующим образом:

crm.factory('popup', function ($document) { 
    return { 
     open: function (data) { 
      var injector = angular.element(document).injector(), 
       $compile = injector.get('$compile'), 
       template = angular.element('<popup></popup>'); 

      // var ctmp = $compile(template.contents()); 
      $compile(template.contents()); 

      $document.find('body').append(template); 
     } 
    }; 
}); 

И я не думаю, что это хорошая идея hard code $ compile сервис (но у меня нет идей, как реализовать это в угловом):

$compile = injector.get('$compile') 

Popup директива:

crm.directive('popup', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     templateUrl: '/public/js/templates/common/popup.html', 
     link: function() { 
      console.log('link()'); 
     }, 
     controller: function() { 
      console.log('ctrl()'); 
     } 
    }; 
}); 

Может быть, есть и другие способы сделать это? Спасибо.

ответ

1

Вы можете вводить $compile непосредственно в службу, а также вы не совсем правильно, используя $compile:

//commented alternative lines for allowing injection and minification since reflection on the minified code won't work 
//crm.factory('popup', ['$document', '$compile', function ($document, $compile) { 
crm.factory('popup', function ($document, $compile) { 
    return { 
     open: function (data) { 
      var template = angular.element('<popup></popup>'), 
       compiled = $compile(template); 

      $document.find('body').append(compiled); 
     } 
    }; 
}); 
//closing bracket for alternative definition that allows minification 
//}]); 
+2

Неа, я не могу использовать его непосредственно. Ошибка выглядит так: «Неиспользуемая ошибка: круговая зависимость: $ compile <- popup <- $ exceptionHandler <- $ rootScope" – user2573863

+1

Не работает в Angular 1.2, он запрашивает область как параметр – perrohunter

+3

, чтобы исправить это, '$ rootScope' и сделать' $ rootScope. $ new() ', чтобы создать новую область, обновить ответ. – Less