3

我得到以下代码:

<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-show”内容仅在 ng-repeat 之外的一个链接上正常工作,但在此 ng-repeat 中它不起作用。
该链接应打开一个覆盖。ng-view 也可以。

我错过了什么?

4

2 回答 2

5

由于ngRepeat创建了一个新范围,showdetails因此在您之外引用的ng-repeat实例与showdetails在您的重复中更新的实例不同ng-click

您可以查看这篇文章了解更多详细信息,但围绕新范围的一种方法是绑定到对象属性而不是原始类型。

这个小提琴显示了一个小示例绑定到details.show而不是showdetails

$scope.details = { show: true };

于 2013-01-06T22:43:01.263 回答
2

“我错过了什么?”

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

请注意,许多 Angular 内置指令会创建子作用域:ng-repeat、ng-include、ng-switch、ng-controller、指令(可以,但可能不会)。有关原型继承如何工作、尝试绑定到原语时为什么会出现问题以及它如何与 Angular 作用域相关的(更多)信息,请参见此处

要扩展@Gloopy 的答案,您可以考虑其他两种选择:

  1. 在 ng-repeat 内部使用$parent以绑定到父范围属性(而不是创建子范围属性):
    <a ng-click="$parent.showdetails=!$parent.showdetails" ...
  2. 在父范围上定义一个方法并调用它,从而也更改父范围属性(而不是子范围属性):
    <a ng-click="toggleDetails()" ...
于 2013-01-08T04:41:11.167 回答