angularjs编译控制器和插值

时间:2015-11-19 14:39:14

标签: javascript angularjs

the docs上我看到了一个编译"某事的例子"后来补充道。

var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
$(document.body).append($div);

angular.element(document).injector().invoke(function($compile) {
  var scope = angular.element($div).scope();
  $compile($div)(scope);
});

我在jquery ready函数中添加了这个代码,但我有两个问题:

首先是一个错误:  Argument 'MyCtrl' is not a function, got undefined

第二个是我不知道如何使content.label成功!我已将其添加到scope但它不起作用。我该如何调用我的控制器来查看content.label的数据绑定?

我的最终修改后的代码是:

var app = angular.module('app',[]);

    $(function(){

        app.controller('MyCtrl',function($scope){
            $scope.content = 123;
        });

        var $div = $('<div ng-controller="MyCtrl">{{content}}</div>');
        $(document.body).append($div);

        angular.element(document).injector().invoke(function($compile) {
          var scope = angular.element($div).scope();
          $compile($div)(scope);
        });

    });

1 个答案:

答案 0 :(得分:4)

<强>更新

编译新标记后,您应该开始一个摘要循环,以构建所有绑定和消防观察者。这可以通过致电scope.$digest();

来完成
$compile($div)(scope);
scope.$digest();

结果如下:

var app = angular.module('app',[]);
  app.controller('MyCtrl',function($scope){
      $scope.content = 123;
  });

  angular.element(document).ready(function () {
      var $div = $('<div ng-controller="MyCtrl">{{content}}  </div>');
      $(document.body).append($div);

      angular.element(document).injector().invoke(function($compile) {
        var scope = angular.element($div).scope();
        $compile($div)(scope);
        scope.$digest();
      });

  });

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