在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);
});
});
答案 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();
});
});