我观察到,当我使用ng-include
指令包含模板时,ng-show
和ng-hide
似乎不起作用。
注意:在angularjs 1.0.4
和1.0.5
中测试
这项工作
template.html
<table ng-init="changeable = null">
<tr ng-repeat="(key, item) in items" ng-click="changeable = key">
<td>
<span ng-show="changeable != key">{{item.name}}</span>
<input ng-hide="changeable != key" ng-model="item.name">
</td>
<td>
<button ng-click="changeable = null">OK</button>
</td>
</tr>
</table>
这不起作用
template.html
<div ng-include src="'/changeable_table.html'"></div>
changeable_table.html
<table ng-init="changeable = null">
<tr ng-repeat="(key, item) in items" ng-click="changeable = key">
<td>
<span ng-show="changeable != key">{{item.name}}</span>
<input ng-hide="changeable != key" ng-model="item.name">
</td>
<td>
<button ng-click="changeable = null">OK</button>
</td>
</tr>
</table>
更新
过了一段时间github@pkozlowski-opensource给我一个wiki的链接,它很好地解释了为什么这个名称空间是必要的,它是范围原型继承的Nuances
您有两个问题:
-
不要忘记
ng-repeat
为每个条目创建了一个新的作用域,按照您的操作方式,changeable
属性不会在所有这些作用域之间共享。正确定义您的模型(示例(:<table ng-init="model = {}; model.changeable = null">
并将所有对
changeable
的引用更改为model.changeable
。 -
tr上的
ng-click
将覆盖按钮上的ng-click
(当您单击按钮时,也会单击tr(。将trng-click
移动到跨度:<span ng-show="model.changeable != key" ng-click="model.changeable = key">{{item.name}}</span>
plunker:http://plnkr.co/edit/TTAUsPhqSq2rkF47EtNL?p=preview