Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
如何使用$injector加载angularjs指令_Angularjs_Angularjs Injector - Fatal编程技术网

如何使用$injector加载angularjs指令

如何使用$injector加载angularjs指令,angularjs,angularjs-injector,Angularjs,Angularjs Injector,我试图使用由angular.injector加载的其他模块的指令,但angular无法理解other\u模块中的指令 在我的主文件中,我声明了我的模块 angular.module('blockApp', []).directive('', []); 在第二个文件中,我尝试添加角度图表作为依赖项: var otherBlock = angular.module('blockApp'); otherBlock.run(function() { angular.

我试图使用由
angular.injector
加载的其他模块的指令,但angular无法理解
other\u模块中的指令

在我的主文件中,我声明了我的模块

  angular.module('blockApp', []).directive('', []);      
在第二个文件中,我尝试添加角度图表作为依赖项:

  var otherBlock = angular.module('blockApp');
  otherBlock.run(function() {
      angular.injector(['ng', 'angularCharts']);
  });
然后我使用了
angularCharts
的指令,但angularjs无法识别它们。 我知道我们应该在声明模块时添加依赖模块,但这是一个特例。

这里是一个plnkr

在本例中,您可以使用$compile(您仍然需要示例中的$scope,但是$compile基本上回答了您的问题)

全部代码

//创建角度图
angular.module('angularCharts',[])。指令('charts',function(){
返回函数(){}
}); 
//创建blockapp
angular.module('blockApp',[])指令('',[]);
//正在检索创建的blockapp
//注意!ng应用程序将为blockapp创建新的注入器
var blockapp=angular.module('blockapp',[]);
blockapp.run(函数(){
//创建一个新的喷油器
var chartsInjector=角度喷油器(['ng','angularCharts']);
console.log(“chartsInjector=”,chartsInjector);
var$compile=chartsInjector.get(“$compile”);
log(“$compile=”,$compile);
var chartsDirective=$compile(“”);
console.log(chartsDirective);
})

plnkr

你可以得到它。。嗯,你需要
获取它<代码>角度.injector(['ng','other_module']).get('directiveNameDirective')带“directive”的后缀指令名感谢PSL,但它得到了
错误:[$injector:unpr]未知提供程序:$rootElementProvider@PSL
angular.injector(['ng','other_module']).get('directiveNameDirectirve)
调用
other_module.directive('directiveName,function(){})
但angular仍然不理解
directiveName
。我想我们仍然需要注册
directiveName
到angular…谢谢Noypi,您的解决方案可以解决我的问题。angularjs有没有办法从模板自动编译
图表
,而不是使用$compile?还有,为什么您知道
$injector.get
可以获得
$compile
,我认为它只能从模块获得服务?再次感谢:)很高兴能帮上忙。如果打开“docs.angularjs.org/api”,左侧是“ng”模块提供的默认服务。应该提供这些服务。当我在指令的定义对象中尝试“template”参数时,我放在那里的指令在指令编译时会被编译。啊,是的,还有一个$templateCache服务,请检查它。。。
    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);
  })
<body ng-app="blockApp">
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>