widoczność ukryta w AngularJs?

80
<button id="tagBtnId" name="TagsFilter" ng-show="disableTagButton">Tags</button>

ng-show stosowane display: nonelub display: blockwłaściwość Ale chcę zastosować visibility: hiddeni visibility: visiblewłaściwości.

chirag
źródło

Odpowiedzi:

75

Możesz użyć dyrektyw ng-classlub, ng-stylejak poniżej

ng-class

doda to klasę myclassdo przycisku tylko wtedy, gdy disableTagButtonjest prawdziwe, jeśli disableTagButtonjest fałszywe myclass, usunie z przycisku

wyrażenie do ng-classmoże być łańcuchem reprezentującym nazwy klas rozdzielane spacjami, tablicą lub mapą nazw klas na wartości logiczne.

1 - nazwy klas rozdzielane spacjami

.. ng-class="{strike: deleted, bold: important, red: error}".. 

2 - tablica

.. ng-class="[style1, style2, style3]".. 

style1, style2 i style3 to klasy css, sprawdź poniższe demo, aby uzyskać więcej informacji.

2 - wyrażenie

.. ng-class="'my-class' : someProperty ? true: false".. 

jeśli somePropertyistnieje, dodaj .my-classelse usuń go.

Jeśli nazwa klasy css ng-classjest oddzielona myślnikami, musisz zdefiniować ją jako ciąg znaków, tak jak .. ng-class="'my-class' : ..inaczej możesz zdefiniować ją jako ciąg lub nie jako.. ng-class="myClass : ..

ng-class DEMO

<button id="tagBtnId" name="TagsFilter" ng-class="{'myClass': disableTagButton}">Tags</button>

<style>
   .myClass {
       visibility: hidden
    }
</style>

ng-style

Wyrażenie przekazuje wartości evals w [stylu ][2]ng do obiektu, którego klucze są nazwami stylów CSS, a wartości odpowiadają wartościom tych kluczy CSS.

DAWNY:

.. ng-style="{_key_ : _value_}" ...=> _key_jest właściwością css podczas _value_ustawiania wartości właściwości. Ex =>.. ng-style="{color : 'red'}" ...

Jeśli używasz czegoś podobnego, background-colorto nie jest to prawidłowy klucz obiektu, to musi być cytowany tak .. ng-style="{'background-color' : 'red'}" ...samo jak ng-class.

<button id="tagBtnId" name="TagsFilter" ng-style="disableTagButton">Tags</button>

wtedy disableTagButtonpowinno być jak

$scope.disableTagButton = {'visibility': 'hidden'}; // then button will hidden.

$scope.disableTagButton = {'visibility': 'visible'}; // then button will visible.

więc możesz zmienić widoczność przycisku, zmieniając $scope.disableTagButton.

lub możesz użyć go jako wyrażenia wbudowanego,

ng-style="{'visibility': someVar ? 'visible' : 'hidden'}"

jest someVarszacowana na true, a następnie widoczność ustawiona na visibleElse visibility ustawiona na hidden.

Kalhan Toress
źródło
jak zmieniłem "widoczność: widoczne". W tym celu muszę stworzyć nową klasę?
chirag
Po prostu ustaw zmienną na false, w ten sposób klasa zostanie usunięta
Michael
ustawione disableTagButtonna falseto automatycznie klasa myClassusunie się z przycisku, a następnie visibility: hiddenusunie
Kalhan.Toress
Jak ustawić wyświetlanie: blok bez warunku true false? jak ng-style = "{" someDivId ", 'display': 'block'}". Chcę to zrobić w html, a nie w js.
Milee
50

Możesz użyć ng-style. Prosty przykład:

<div ng-style="{'visibility': isMenuOpen?'visible':'hidden'}">...</div>

W czasie wykonywania styl zmienia się wraz ze isMenuOpenzmianami.

  • Kiedy isMenuOpento prawda , będziesz mieć style="visibility: visible".
  • Kiedy isMenuOpenjest fałszywe , będziesz mieć style="visibility: hidden".
AlikElzin-kilaka
źródło
Jak ustawić wyświetlanie: blok bez warunku true false? jak ng-style = "{" someDivId ", 'display': 'block'}". Chcę to zrobić w html, a nie w js.
Milee
1
@Milee Jest w html. Przykład:<div ng-style="{'visibility': isMenuOpen?'visible':'hidden'}">...</div>
AlikElzin-kilaka
umiesz pisać: ng-style="{visibility: isMenuOpen?'visible':'hidden'}" Cytaty są przydatne tylko w przypadku słów złożonych. W przeciwnym razie możesz użyć składni CAML dla właściwości css utworzonych bez cudzysłowów.
męskość
15

Oto prosta dyrektywa, która ustawia widoczność na ukrytą lub widoczną (ale nie zwijaną):

.directive('visible', function() {

    return {
        restrict: 'A',

        link: function(scope, element, attributes) {
            scope.$watch(attributes.visible, function(value){
            element.css('visibility', value ? 'visible' : 'hidden');
        });
    }
  };
})

Stosowanie:

<button visible='showButton'>Button that can be invisible</button>

Gruff Bunny
źródło
Podoba mi się podejście dyrektywne, w tym przypadku może to być przesada. Ale nadal mi się podoba :)
Raz0rwire
2
Zespół Angular powinien po prostu dodać ng-visibledyrektywę.
iheartcsharp
12

Lub jeśli używasz bootstrap, użyj invisibleclass

ng-class='{"invisible": !controller.isSending}'
Duane Fields
źródło
najprostsze i najbardziej eleganckie rozwiązanie, czyli dla osób korzystających z bootstrapa.
Souhaieb Besbes
2

Powinieneś użyć ngClass lub ngStyle , w twoim przypadku:

<button id="tagBtnId" name="TagsFilter" 
    ng-class="{'button-hidden':!disableTagButton}">Tags</button>

A ten CSS :

.button-hidden{
   visibility: hidden;
}
Michael
źródło
1

dlaczego nie używasz ng-if tag nie jest renderowany na Twojej stronie HTML. Myślę, że używasz tego:

<button id="tagBtnId" name="TagsFilter" ng-if="disableTagButton">Tags</button>
Sandeep
źródło
3
Jest to podobne do wyświetlania; brak, ale wymagany styl to visibility: hidden. Co nie jest tym samym.
Yury Kozlov
Zależało mi na tej funkcjonalności ng-if, ponieważ chciałem ustawić widoczność na ukrytą, a element nie powinien pojawiać się w html. idealne rozwiązanie.
Kiran Chaudhari
1

zobacz https://docs.angularjs.org/api/ng/directive/ng Pokaż sekcję o zastępowaniu .ng-hide

Wystarczy przypisać klasę hg-hide-animatedo elementu

/* style your element(s) at least for selector.ng-hide */
/* in this case your selector is #tagBtnId */
#tagBtnId.ng-hide {
  /*visibility:hidden;*/
  opacity: 0;
  transition: opacity 1s ease-in;
}
#tagBtnId {
  /*visibility:initial;*/
  opacity: 1;
  transition: opacity 1s ease-out;
}

user2173403
źródło