2013-01-23 18 views
43

wiem jak zrobić widok warunek w angularjs, który będzie wyświetlany lub elementu ukryj dom od warunku:Zrób stan renderowania z angularjs

<div ng-show="{{isTrue}}">Some content</div> 

ale jak mogę utworzyć renderowanie warunek, który określa, czy renderować div, czy nie?

Odpowiedz

63

Aktualizacja angularjs 1.1.5 i powyżej użytkowników (nie obsługiwane w 1.0.7):

Związany popełnić: https://github.com/angular/angular.js/commit/2f96fbd17577685bc013a4f7ced06664af253944

kątowa teraz warunkowa dyrektywa renderowania: ngIf .

Zastosowanie:

<div ng-if="conditional_expression"></div> 

Zauważ, że gdy element jest usuwany za pomocą ngIf jego zakres jest zniszczona i nowy zakres jest tworzony, gdy element jest przywracany

Documentation: directive-ngIf

Dla starszych użytkowników angularjs:

ngShow Dyrektywa warunkowo ukrywa/pokazuje element. Zostanie to zmienione w jednej z nowych stabilnych wersji, teraz jest dostępne w wersji unstable, podobnie jak w przypadku 1.1.5.

Jeśli chcesz warunkowo dodawać/usuwać elementy w DOM, użyj można użyć ngSwitch.

<div ng-switch="showMe"> 
    <div ng-switch-when="true">Hello!</div> 
</div> 

W rzeczywistości niniejsza dyrektywa została stworzona do obsługi spraw dla więcej niż 1, ale można z niej korzystać również w ten sposób. Zobacz this odpowiedź na przykłady bardziej wyrafinowanych zastosowań.

+0

Jeśli "ng-if" jest fałszywe, DOM jest renderowany we wsadzie, ale nie można go wyrenderować? –

1

Istnieją co najmniej dwa sposoby że:

  • czynią niektóre częściowe użyciu szablonów
  • użyć prostego wyrażenia z warunkowym funkcja renderowania (patrz this fiddle i opis poniżej)

Dla prosty komponenty, polecam trzymać się funkcji renderowania. Bardzo łatwe do zrozumienia.

$scope.render = function(condition) {   
    return condition ? "This is rendered when condition == TRUE" : "This is rendered when condition == FALSE"; 
}; 

i po prostu umieścić go w kodzie HTML, tak jak poniżej:

{{render(true)}} 

Można też owinąć to z kątowym dyrektywę, która daje bardzo ładny znaczników i nieograniczone możliwości!

+0

To miłe podejście. ale naprawdę oczekiwałem czegoś eleganckiego, takiego jak ng-render = "{{warunek}}", aby było to naprawdę proste i łatwe – Alon

+0

Przeczytaj uważnie moją odpowiedź - możesz zawrzeć w niej dyrektywę, która da ci dokładnie to, czego potrzebujesz - czysty znacznik, tak jak poniżej: ' ...' Nie sądzę, by Angular zapewnił to po wyjęciu z pudełka. –

+2

Tworzenie dyrektywy renderowania nie jest takie proste. OP oznacza, że ​​chciałby zmienić strukturę domową, a dyrektywa musi obserwować warunkową własność i niszczyć zakres oraz wydobywać powiązane źródła lub prawdopodobne jest wyciekanie do pamięci. –

3

Zalecana sposobem jest użycie ng obejmują

Przykład: http://jsfiddle.net/api/post/library/pure/

<div ng-app=""> 
    <div ng-controller="Ctrl"> 
    <select ng-model="template" ng-options="t.name for t in templates"> 
    <option value="">(blank)</option> 
    </select> 
    url of the template: <tt>{{template.url}}</tt> 
    <hr/> 
    <div ng-include src="template.url"></div> 
    </div> 


    <!-- template1.html --> 
    <script type="text/ng-template" id="template1.html"> 
    Content of template1.html 
    </script> 

    <!-- template2.html --> 
    <script type="text/ng-template" id="template2.html"> 
    Content of template2.html 
    </script> 
</div> 
+9

Gdzie jest to zalecane? To wydaje mi się przesadą dla małych fragmentów html. Twoje przysłowie nie działa, tak przy okazji. – Alberto

0

Spójrz na angular-uiif dyrektywy. Wierzę, że to dobrze ci służy.

+0

Wygląda na to, że został usunięty z Angular UI. Nie ma pojęcia dlaczego. –

+1

@bmożekau prawdopodobnie dlatego, że ngif jest teraz częścią AngularJS od wersji 1.1.5 – rdjs

+0

Ponieważ rdzeń AngularJS nadrabia zaległości. – demisx