gpt4 book ai didi

javascript - 在 AngularJS 中,如何将指令绑定(bind)到指令根元素以外的元素中?

转载 作者:行者123 更新时间:2023-12-03 11:34:13 25 4
gpt4 key购买 nike

我希望我正在创建的指令出现在该指令出现的模板范围之外的元素内。

我的问题是,我试图让灯箱渲染页面的所有内容,而不仅仅是渲染它的模板中的内容。

假设下面的结构,我希望 my-directive 指令在 containerController 范围内运行,但我希望 my-directive 的模板将渲染到 #lightbox .content 中。完成此任务的“Angular ”方式是什么?

<body>
<div id="container" ng-controller="containerController">
<my-directive show="directiveVisible"></my-directive>
</div>

<div id="lightbox">
<div class="content"><!-- my-directive template gets rendered here --></div>
</div>
</body>

最佳答案

这是 $compile 的工作服务。您可以编译一个模板(不是指令的模板 - 将其留空,这样指令的位置就不会出现任何内容)并将编译后的元素放置在 DOM 中您喜欢的任何位置。您还必须记住,当指令的范围被破坏时,从 DOM 中删除该元素。所以一些非常简单的代码将是:

app.directive("myDir", function($compile) {
return {
restrict: "E",
link: function(scope, elem, attrs) {
var target = angular.element(document.getElementById(attrs.target));
var compiled = $compile('<input type="text" ng-model="data.name" />')(scope);
target.append(compiled);
scope.$on("$destroy", function() {
target.empty();
});
}
};
});

fiddle 样本:http://jsfiddle.net/3nkp9p9y/

您会注意到编译后的 <input>出现在指令之外,实际上也在 Angular 应用程序之外,并且仍然通过原型(prototype)继承绑定(bind)到 Controller 的范围。

关于javascript - 在 AngularJS 中,如何将指令绑定(bind)到指令根元素以外的元素中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26597690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com