Javascript 如何在angular js中的服务内创建指令?
我需要在angular服务中创建一个指令,然后在事件中插入元素并将该指令编译到dom中,插入和编译似乎工作正常,但从angular内部(控制器、服务或任何地方)动态创建的指令似乎没有注册或其他什么 这是我当前代码的简化版本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
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');
}
这是一篇懒散加载的文章,我发现这篇文章对做这些事情很有帮助