我知道我可以apply
到template / templateURL,但是当前内容将从我的应用程序中的另一个位置加载。
JSbin:http://jsbin.com/imuseb/1/
HTML
<html ng-app="app">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
</head>
<body>
<div alert>here</div>
</body>
</html>
JS代码:
var app = angular.module('app', []);
app.directive('alert', function (){
return {
link: function (scope, element, attrs) {
element.on("click", function (){
alert("here");
});
}
};
});
$(function (){
$("body").append("<div alert>here too</div>");
});
新DOM必须可被角度应用访问,以便正确编译。这是执行此操作的一种方法(不是唯一的方法)。要将新的DOM应用于应用程序的$rootScope
,请更改以下内容:
$(function (){
$("body").append("<div alert>here too</div>");
});
至:
app.run(function($rootScope){
$rootScope.$apply($("body").append("<div editable>here too</div>"));
});
根据Angular docs:
$ apply()用于从角度框架外部以角度执行表达式。 (例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。
最好是从有角度的框架中加载额外的内容。签出ng-include
。
如果无法满足您的需要,则必须手动调用元素上的angular编译服务,对其进行编译,然后使用ng-include
自行将其链接到范围上。
编译元素接触DOM,因此,如果可能,应在自定义指令中完成。