AngularJS注射器

时间:2015-02-25 08:06:49

标签: angularjs

任何人都可以给出AngularJS注入器的详细示例。 这是API的代码副本。 “在下面的示例中,一个包含ng-controller指令的HTML新块由JQuery添加到文档正文的末尾。然后我们编译并将其链接到当前的AngularJS范围。”

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<body ng-app="myApp">
</body>
<script>
   angular.module('myApp', []);
var $div = $('<div ng-controller="formController">123</div>');
$('body').append($div);
angular.element(document.body).injector().invoke(function($compile) {
  var scope = angular.element($div).scope();
  $compile($div)(scope);
});

function formController ($scope,$http) {
}
</script>

我将其复制并粘贴到html页面中,但它不起作用。有错误

  

未捕获的ReferenceError:$未定义

更新: 我已经包含了jquery,并且出现了一个新错误:

  

未捕获的TypeError:无法读取未定义的属性“invoke”

1 个答案:

答案 0 :(得分:1)

  1. 创建一个角度模块 - angular.module('myApp',[]);
  2. 更新body元素以使用此模块 - <body ng-app="myApp">
  3. 给角度一些时间来引导应用程序。

    setTimeout(function () {
        // now you can use the injector.
        var $div = $('<div ng-controller="formController">123</div>');
        $('body').append($div);
        angular.element(document.body).injector().invoke(function($compile) {
            var scope = angular.element($div).scope();
            $compile($div)(scope);
        });
    }, 100);
    
  4. 您的示例应该可以使用这些更改。