如何加载angularjs指令使用$ injector

时间:2014-10-08 03:36:06

标签: angularjs angularjs-injector

我正在尝试使用angular.injector加载的其他模块的指令,但angular无法理解other_module中的指令。
在我的主文件中,我声明了我的模块。

  angular.module('blockApp', []).directive('', []);      

在第二个文件中,我尝试将angularCharts添加为依赖项:

  var otherBlock = angular.module('blockApp');
  otherBlock.run(function() {
      angular.injector(['ng', 'angularCharts']);
  });

然后我使用angularCharts的指令,但angularjs无法识别它们。 我知道我们应该在声明模块时添加依赖模块,但这是特殊情况。

1 个答案:

答案 0 :(得分:1)

这里是一个plnkr http://plnkr.co/edit/Q5oD65wSvBAemf5BCDL7?p=preview

在这种情况下,您可以使用$ compile(您仍然需要示例中的$ scope,但$ compile几乎可以回答您的问题),

    var $compile = chartsInjector.get("$compile");
    console.log("$compile=",$compile);

    var chartsDirective = $compile("<div charts></div>");
    console.log(chartsDirective);

...

  var blockapp = angular.module('blockApp', []); 
  blockapp.run(function(){
    // create a new injector
    var chartsInjector = angular.injector(['ng', 'angularCharts']);
    console.log("chartsInjector=",chartsInjector);

    var $compile = chartsInjector.get("$compile");
    console.log("$compile=",$compile);

    var chartsDirective = $compile("<div charts></div>");
    console.log(chartsDirective);
  })

请注意,您将在此处创建多个注射器。

注射器1)由ng-app

创建
<body ng-app="blockApp">

注入器2)由angular.injector()

创建
var chartsInjector = angular.injector(['ng', 'angularCharts']);

整个代码

<!DOCTYPE html>
<html>

  <head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
    <script type="text/javascript">
      // creating the angularcharts
      angular.module('angularCharts', []).directive('charts', function(){
        return function(){}
      }); 

      // creating blockapp
      angular.module('blockApp', []).directive('', []); 

      // retrieving the created blockapp
      // NOTE! ng-app will create a new injector for blockapp 
      var blockapp = angular.module('blockApp', []); 
      blockapp.run(function(){
        // create a new injector
        var chartsInjector = angular.injector(['ng', 'angularCharts']);
        console.log("chartsInjector=",chartsInjector);

        var $compile = chartsInjector.get("$compile");
        console.log("$compile=",$compile);

        var chartsDirective = $compile("<div charts></div>");
        console.log(chartsDirective);
      })

    </script>
  </head>

  <body ng-app="blockApp">

  </body>

</html>

plnkr http://plnkr.co/edit/Q5oD65wSvBAemf5BCDL7?p=preview