2015-06-20 97 views
1

我有一個非常簡單的例子使用$指數(見:http://plnkr.co/edit/w15Ov5T3vMXK7bfC34M2?p=preview]在點擊標籤不起作用

我使用ng-repeat指令,以顯示我的數據。數據來自'羣組'。在每組內我有動態數據和靜態數據。

我希望讓用戶能夠將每個組內的動態數據的切換知名度。

在我的html中,我已經爲每個組設置了兩個按鈕:一個使用onclick另一個ng-click

在每個按鈕上,我還添加了一個虛擬屬性data-private-index,值爲"{{$index}}",以確保Angular能夠正確替換。

This Works。當我忽略瀏覽器中的元素時,替換值出現在DOM中。

有一個div包裝每個動態數據。我將它的id屬性設置爲"group-{{$index}}",這也可以工作(通過檢查DOM元素)。

在每個按鈕中,我設置了一個點擊事件處理程序的想法是切換包裝動態數據的div的可見性。

enter image description here

一些意外,我跑進:

1 - 的{{$index}}值不出現在onclick屬性得到取代(通過檢查DOM看到)在第一

點擊按鈕觸發alert(...)。但我得到的消息

切換組{{$指數}}

這進一步表明,替代未能成行。

那麼爲什麼替換髮生在div而不是onclick屬性? 我錯過了什麼?

2 - 單擊第二個按鈕甚至不會觸發alert(...)

看來,ng-click被自動忽略(可能由於一些錯誤,我無法辨別)


所以,我怎麼可以動態切換div的知名度?

回答

0

顯然,角度處理事件語句是非常私人的方式,您必須使用ng-click指令。

你可以像這樣做id="'car_{{ $index }}'"但它在事件內部失敗。

有幾種隱藏元素的方法,最直接的是ng-hide和ng-show指令。

要使用可以使用納克級,讓你把一個especific類依賴的條件納克級=的更具體的行爲,請使用「{‘我的定製隱藏’:areaVisible}」

1

你需要使用一個負責切換div的變量。您可以在每個重複的div上使用show變量,該變量將作爲可切換標誌進行維護。

標記

<div ng-repeat="item in ['group#0', 'group#1', 'group#2']"> 
    <p>{{item}} 
     <button ng-click="alert('toggling group '+ $index); show=!show" data-private-index="{{$index}}"> 
     Toogle group #{{$index}} using ng-click 
     </button> 
    </p> 

    <div id="group-{{$index}}" ng-show="show"> 
     ..content here.. 
    </div> 

    <div> 
     <br/> Static non-toggled data 
     <br/> Static non-toggled data 
    </div> 
    </div> 

Demo Plunkr

onclick事件不工作,因爲你正在試圖調用元素document.querySelector('group-{{$index}}')的切換方法,該方法不會給元素,因爲你不能訪問的角度範圍可變內部原生JavaScript方法,就像你試圖訪問索引使用{{}}這將永遠不會工作。對於這種情況,角度確實提供了他自己的方法,如ng-clickng-blur,ng-focus等都是基於事件的指令。雖然你可以訪問元素,並使用正確的元素例如iddocument.querySelector('group-1')你無法使.toggle可行,因爲你需要添加jQuery,那麼只有你可以在元素上使用.toggle()

在處理角度時,您不應該假設在使用元素時使用jQuery,因爲這可能會導致綁定更新問題,大多數情況下需要手動運行摘要循環以使用$scope.$apply()來更新綁定,但不要這樣做。它在AngularJS中被認爲是不好的做法。您可以使用jQuery,但它應該包含在指令中,以便您可以控制Angular DOM並在角度上下文中對其進行修改。