我知道你的NgComponent可以扩展NgShadowRootAware ......但我似乎无法对我的控制器产生同样的影响。
我在范围内观察了一个变量,希望到那时候事情已经准备就绪,但事实并非如此。问题是我的模板隐藏了HTML,直到数据的异步调用完成。然后它显示填充了API调用数据的HTML。我想将事件监听器绑定到隐藏HTML中的输入元素。
我想我可以创建另一个组件,但我觉得它有点傻,因为它特别是在控制器中,与控制器相关,不会在其他任何地方,并且只是一个微小的输入元素。
我做了一个空的$ watch并且一直试图设置输入元素并确定它在最后一个摘要上,但这似乎有点低效。这是我唯一的选择吗?
以下是一些代码:
<div ng-if="!ctrl.assetsLoaded">
<span class="loading-message">{{ctrl.message}}</span>
</div>
<div ng-if="ctrl.assetsLoaded">
<nav id="controls">
<div class="asset-actions">
<a href="#/" class="home-folder"></a>
<div class="folder-path">...</div>
<span class="create-asset choose-file">
<input type="file" id="single-file" name="file" ng-model="singleFile" />
</span>
<a href="#/addFolder" class="create-folder"></a>
<search-asset name-filter-string="ctrl.nameFilter" class="search-asset"></search-asset>
</div>
基本上,我是在ng-if中的输入元素之后。我希望看到这种变化。我现在正在考虑使用ng-model(而不是Dart的事件监听器),但我只是遇到来自AngularJS的混乱。
答案 0 :(得分:1)
为什么不使用ng-show
或ng-hide
代替ng-if
? ng-if
从字面上删除DOM树中的节点。这可能会产生不良后果(即您的听众丢失等)。 ng-show/ng-hide
只显示和隐藏dom节点,它们不会被删除。在你的情况下,我没有看到你会注意到很多性能差异,你的代码会变得更加混乱。
答案 1 :(得分:0)
<input type="file" id="single-file" name="file" ng-model="ctrl.singleFile" />
并且在你的控制器上你使singleFile成为一个getter / setter,你可以在setter上添加你的代码,每次输入值改变时都会执行。