【发布时间】:2013-07-19 09:36:00
【问题描述】:
在 AngularJS 中,我有带有基本嵌入的指令。我知道当我使用它时通常是嵌入的输入或文本区域,如果存在,我想 $watch 其模型以进行更改。但是我无权访问嵌入内容的属性,只能访问调用该指令的根元素的属性。嵌入范围也是如此(也许 scope.$$nextSibling 可以提供帮助,但有些东西告诉我这是通往地狱的路:))。
那么有什么方法可以做到这一点,而无需向调用指令的元素添加另一个参数(属性)?
指令模板
<div ng-transclude>
<someContent>...</someContent>
<!-- HERE IS INPUT TRANSCLUDED -->
</div>
指令用法
<div my-directive="somedata"> //this attribs are accessable
<input ng-model="iWantToWatchThisInMyDirective" /> //but i want to access this also
</div>
【问题讨论】:
-
你想达到什么目的??
-
我想知道模型文本是否为空并应用一些逻辑,例如将类添加到指令的根元素等。
-
最好的方法是在属性中传递参数 iWantToWatchThisInMyDirective 并观察该属性,但如果你不想这样做,那么你可以在父控制器中观看模型并在父控制器中广播事件并收听指令中的事件
-
@Ajaybeniwal 不错的提示!我还发现 angular.element 提供了 scope() 方法,因此可以通过这种方式访问范围。现在只需找出元素中 ngModel / ngBind 的内容 - 充其量是标准化形式的 $attrs,所以我不必尝试每个替代方案(data-ng-model,x-ng-model atc..)..
标签: angularjs angularjs-directive transclusion