2013-01-06 88 views
3

我得到了下面的代码:AngularJS - NG-重复和NG-显示

<div class="map" ng-controller="DealerMarkerListCtrl"> 
    <a ng-click="showdetails=!showdetails" href="#/dealer/{{marker.id}}" class="marker" style="left:{{marker.left}}px;top:{{marker.top}}px" ng-repeat="marker in dealer"></a> 
</div> 

这种观点:

<div ng-show="showdetails" class="alldealermodal">  
    <div ng-view></div> 
</div> 

同样的 “NG-秀” 的东西是只用一个正常工作在ng-repeat之外的链接,但是在这个ng-repeat中它不起作用。
链接应打开覆盖。 ng-view也起作用。

我错过了什么?

回答

5

由于ngRepeat创建一个新的范围showdetails被你ng-repeat外引用是不一样的实例作为showdetails在反复ng-click被更新。

你可以看到this post更多的细节,但围绕新范围(S)的一种方法是绑定到一个对象的属性,而不是一个原始类型。

This fiddle显示了一个小例子结合details.show,而不是showdetails着: “我是什么失踪”

$scope.details = { show: true };

+0

它的工作,谢谢! – Marek123

2

正如@Gloopy已经提到的,您可能没有意识到ng-repeat会创建子范围(每个项目一个)。此外,理解JavaScript原型继承如何工作也是必要的,因为每个子范围原型继承自同一个父范围,并影响JavaScript在范围上找到(或创建)属性的方式。

注意,多个角内置指令创建子作用域:NG-重复,NG-包括NG-开关,NG-控制器指令(也可以,但可能不会)。对于(多)关于继承原型是如何工作的,为什么它试图绑定到原语时出了问题,而且它与角范围,见here更多信息。

为了延长@ Gloopy的答案,还有其他两个备选方案可以考虑:

  1. 使用$parent的NG-重复内绑定到父作用域属性(而不是创建子作用域属性):
    <a ng-click="$parent.showdetails=!$parent.showdetails" ...
  2. 定义父范围的方法并调用它,从而也改变父范围属性(而不是一个子范围属性):
    <a ng-click="toggleDetails()" ...