【发布时间】:2013-12-14 08:18:50
【问题描述】:
使用 AngularJS 1.0.8,我正在尝试创建一些可重用的指令来创建一个 Web 开发人员可以编写具有多个属性的单个“顶级”指令的情况,而该指令又具有包含其他指令的模板,这些指令本身可能包含其他指令等。
我遇到的问题是让“内部”模板了解顶级属性。我认为这将是一个普遍的问题,但从我的研究来看,没有其他人在问这个问题。
我创建了这个Plunker 来显示问题:
<!DOCTYPE html>
<html ng-app="outerInnerDirectivesApp">
<head>
<title>Outer/Inner Directives</title>
</head>
<body>
<div>Single level directive follows:</div>
<single-level-directive single-level-id="single123"></single-level-directive>
<div>Outer/inner directive follows (Expecting "outer123"):</div>
<outer-directive outer-id="outer123"></outer-directive>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<script src="app.js"></script>
<script src="directives.js"></script>
</body>
</html>
在 Plunker 中,
单级指令有效,而且我认为是显示数据的标准方式。
外部指令和内部指令不起作用。
我期望这些会发生的是
(i) outerDirective 编译/链接以生成 html
<inner-directive inner-id="outer123"></inner-directive>
然后
(ii) innerDirective 编译/链接以生成 html
<div>outer123</div>
但是在第 (ii) 步我得到了
<inner-directive inner-id="" class="ng-isolate-scope ng-scope">
<div class="ng-binding"></div>
</inner-directive>
所以innerDirective会生成一个空的div。
其实如果我把outer-template.html改成
<div>{{outerId}}<div>
然后该值正确显示,因此看起来 scope.outerId 在正确的位置可用,但 Angular 对我尝试以我现在的方式使用它并不满意。
期望 Angular 这样做是合理的吗?如果是这样,我错过了什么?如果不是,那么您认为从简单的指令集构建更复杂的屏幕的明智替代方法是什么?
【问题讨论】:
标签: javascript html angularjs angularjs-directive angularjs-scope