2013-04-02 11 views
20

Chciałbym, aby element div był domyślnie ukryty i widoczny po najechaniu na główny element div.kątowa: aktualizacja zakresu na unosić się

Próbuję mieć tego rodzimego w kanciastych i zapomnieć o sposób .hover() w jquery.

Chociaż używam ng-show na podrzędnym elemencie div, a następnie aktualizuję wiązanie po najechaniu na główny div. Czy istnieje dyrektywa, aby słuchać zawieszania?

+0

Nie ma dyrektywy dotyczącej zawisu (np. Ng-hover), ale można ją napisać! To jest piękno AngularJS. =) – Swordfish0321

Odpowiedz

51

Jesteś na dobrej drodze. W rzeczywistości możesz użyć dyrektyw ngMouseenter i ngMouseleave, aby to zrobić.

<span ng-mouseenter="show = true" ng-mouseleave="show = false"> 
    Mouse over me. 
</span> 

<div ng-show="show">Hello!</div> 

Oto Plunker pracy: http://plnkr.co/edit/Ro80nR7HT7OGGPCXjz7E?p=preview

@ Swordfish0321 jest również prawo - można napisać bardzo prosty dyrektywę wysłuchać specjalnie dla zawisu, jeśli chcesz, ale to może nie być konieczne. Używamy na przykład mouseenter i mouseleave dla podpowiedzi w UI Bootstrap.

+0

dzięki! to właśnie szukałem –

+0

@ Josha Davida Millera. Chcę wyświetlić "Hello" również, gdy najecham na niego. I nie mogę tego nazwać wewnętrznym divem. Jakaś pomoc w tej sprawie? – user100693

4

Dzięki @JoshDavidMiller za bardzo zwięzłą odpowiedź. Miałem potrzebę zrobienia tego w powtórzeniu ng i nie mogłem w pełni wymyślić tego eleganckiego sposobu. Za pomocą wartości boolowskiej w zakresie pokazano elementy sterujące edycją dla wszystkich elementów na liście, a nie tylko dla wskaźnika, nad którym wisiałem. Prawie pochyliłem się nad wyszukaniem angular.element (tj. JQuery) i dołączeniem samouczków po najechaniu kursorem, aby mogły ręcznie pokazać tylko elementy sterujące dla zawieszonego elementu. Cieszę się, że nie upadłem na tak złe sposoby.

<div ng-repeat="item in items" ng-mouseenter="item.showEdit = true" ng-mouseleave="item.showEdit = false"> 
    <span class="glyphicon glyphicon-edit" ng-show="item.showEdit"></span> 
    Mouse over me. 
</div> 

Wystarczy dołączyć obiekt do item zamiast $scope. W kilku sytuacjach nie mogłem dodać losowych kluczy do elementów na mojej liście, więc zmapowałem moją tablicę do nowej, gdzie item jest w rzeczywistości właściwością obiektu opakowania, wtedy mógłbym dołączyć dowolne właściwości, które chciałem do obiektu opakowania bez zanieczyszczania kluczy item.

+2

Miałem podobny problem, który rozwiązałem, wyraźnie odwołując się do $ parent scope. Wcześniej, gdy próbowałem bezpośrednio zaktualizować obiekt, po prostu utworzyło nowe pole o tej samej nazwie w dolnym zakresie. – downhand

+0

@downhand Dobrze, to z powodu dziedziczenia zakresu. Możesz czytać dziedziczone właściwości, ale ustawienie ich tylko ukrywa właściwość prototypu zamiast jej przesłonić. Więcej o ograniczeniu JavaScript niż Angular :) – Chev

Powiązane problemy