AngularJS Injector - 错误:[$ injector:unpr]未知提供者:$ rootScopeProvider< - $ rootScope

时间:2014-02-11 06:22:45

标签: javascript jquery angularjs angularjs-ng-click

可能是一个微不足道的问题,但对于AngularJS新手来说,这是一个问题^ _ ^

我最初想要实现的是使用ng-click指令生成动态插入的标记(通过jQuery)。我搜索过并发现我要获得AngularJS Injector,然后编译该代码。所以这里是最简单的注射器代码形式,对我不起作用,它有什么问题?

注意#1:带有ngDirective的动态插入标记在AngularJS范围之外完成。

angular.module('simpleExample', [])
.run(
  [ '$rootScope',
  function ($rootScope) {
    $rootScope.test = "Test";
  }]);

console.log(angular.injector(['simpleExample']));

// console.log(angular.injector(['simpleExample']).$compile('<a href="" ng-click="someFunctionOnRootScope()">Text</a>'));

http://jsfiddle.net/Zx8hr/6/

1 个答案:

答案 0 :(得分:3)

ng模块

  • angular.bootstrap在使用时自动将ng模块添加到依赖项中(手动或使用ngApp
  • $rootScope / $compile服务是ng模块的一部分。
  • 如果您需要这些服务,则需要使用injector.invoke
  • 您应该以更传统的方式使用角度。

试试这个:

angular.module('simpleExample', ['ng']);

angular.injector(['simpleExample'])
  .invoke(['$rootScope','$compile', 
    function($rootScope, $compile){

      var elm = $compile('<a href="" ng-click="someFunctionOnRootScope()">Text</a>')($rootScope);
      $rootScope.someFunctionOnRootScope = function(){
          alert("Hello there!");
      }
      angular.element(document.body).append(elm);

}]);