Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angular js中的服务内创建指令?_Javascript_Angularjs_Angularjs Directive_Angular Services - Fatal编程技术网

Javascript 如何在angular js中的服务内创建指令?

Javascript 如何在angular js中的服务内创建指令?,javascript,angularjs,angularjs-directive,angular-services,Javascript,Angularjs,Angularjs Directive,Angular Services,我需要在angular服务中创建一个指令,然后在事件中插入元素并将该指令编译到dom中,插入和编译似乎工作正常,但从angular内部(控制器、服务或任何地方)动态创建的指令似乎没有注册或其他什么 这是我当前代码的简化版本 var dirs = angular.module('dirs', []); dirs.factory('directiveCreator', function($rootScope) { var creator = {}; creator.addDir

我需要在angular服务中创建一个指令,然后在事件中插入元素并将该指令编译到dom中,插入和编译似乎工作正常,但从angular内部(控制器、服务或任何地方)动态创建的指令似乎没有注册或其他什么

这是我当前代码的简化版本

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

dirs.factory('directiveCreator', function($rootScope) {

    var creator = {};

    creator.addDirective = function(config) {

        dirs.directive(config.name, function() {
            return {
               restrict: config.restrict,
               template: config.template,
               replace: config.replace,
           }
       });

       //insert element with the directive above into DOM on this event and compile
       $rootScope.$broadcast('directive.added');

    }

    return creator;
}

指令被正确地添加到模块上的invokeQueue,但它根本不起作用,我是否遗漏了什么?

您需要捕获
$compileProvider
,然后使用
指令
方法,而不是使用
模块bj.directive
方法

var dirs = angular.module('dirs', []);
dirs.config(function($compileProvider){
   dirs.compileProvider = $compileProvider;
});
然后,当您需要动态地包含新指令时

creator.addDirective = function(config) {
    dirs.compileProvider.directive(config.name, function() {
        return {
           restrict: config.restrict,
           template: config.template,
           replace: config.replace,
       }
   });
   //insert element with the directive above into DOM on this event and compile
   $rootScope.$broadcast('directive.added');
}
这是一篇懒散加载的文章,我发现这篇文章对做这些事情很有帮助