我知道我可以apply
到模板/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必须能被angular应用访问,才能被正确编译。这里有一种方法(不是唯一的方法)。为了将新的DOM应用到应用程序的$rootScope
,修改如下:
$(function (){
$("body").append("<div alert>here too</div>");
});
:
app.run(function($rootScope){
$rootScope.$apply($("body").append("<div editable>here too</div>"));
});
根据Angular文档:
$apply()用于在angular框架之外执行angular中的表达式。(例如从浏览器DOM事件,setTimeout, XHR或第三方库)。
如果你能从angular框架中加载额外的内容就更好了。查看ng-include
如果不能用它来做你需要的事情,你必须手动调用元素上的angular编译服务,编译它并使用$compile
将它链接到作用域。
编译元素涉及DOM,因此如果可能的话,应该在自定义指令中完成。