在配置块

时间:2015-09-30 16:00:53

标签: angularjs angularjs-directive angularjs-compile angularjs-config

我试图在飞行中创建指令,实际上我已经实现了这一点,但接缝非常糟糕。

这是我的第一个方法:

function create(myDir) {
   angular.module("app").directive(myDir.name, function() {
   return {
     template:myDir.template
   };
  });
}

它没有用,因为你无法在应用程序启动后注册指令。

基于这篇文章:http://weblogs.thinktecture.com/pawel/2014/07/angularjs-dynamic-directives.html

我发现我可以使用compileProvider来完成工作,但由于compileProvider在配置块之外是不可用的,所以你需要把它拿出来,所以我做了:

var provider = {};
angular.module("app",[]);        

angular.module('app')
.config(function ($compileProvider) {
    //It feels hacky to me too.
    angular.copy($compileProvider, provider);
 });
....

function create(myDir) {
    provider.directive.apply(null, [myDir.name, function () { 
        return { template: myDir.template } }]);
    render(myDir); //This render a new instance of my new directive
}

令人惊讶的是它有效。但我不能感觉黑客 compileProvider ,因为我没有按照它想象的方式使用它,我真的很喜欢知道在应用程序启动后是否可以正确使用 compileProvider

1 个答案:

答案 0 :(得分:3)

有一个可以注入config块的依赖项列表(这些块是内置的$provide$injector和所有服务提供程序)以及可以依赖的依赖项列表注入到其他地方(服务实例和旧的$injector)。正如您所看到的constant所做的一切都是adding the dependency to both lists

config之外使用提供商的常用方法是

app.config(function ($provide, $compileProvider) {
  $provide.constant('$compileProvider', $compileProvider);
});