2013-01-06 87 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()" ...