ngShow не се актуализира при натискане към обект/масив

Възможно е това да не е осъществимо просто, но аз крия списък, ако няма никакви данни и след това се надявах да покажа този списък, ако нещо беше избутано към него.

Ето работещ пример – на теория съобщението „Няма намерени задачи“ трябва да изчезне и след това да се появи списък. Включих дъмп на $scope.todos под бутона Добавяне, за да покажа актуализирането на $scope.
http://plnkr.co/edit/4hwkwn?p=preview

Мога ли да кажа на DOM да се актуализира след извикването add()?


person Chris Southam    schedule 13.06.2014    source източник
comment
логиката ти не е съвсем правилна ng-show="todos" винаги ще е вярно   -  person charlietfl    schedule 13.06.2014


Отговори (3)


ng-show показва кога стойността е вярна, в примера, който подавате в празен масив. Въпреки че масивът е празен, той е вярна стойност, което означава, че стойността се принуждава към true, когато се оценява в булев контекст.

Ако искате да скриете списъка, когато е празен, можете да направите ng-show="todos.length", което ще се изчисли на 0 равно на false и по този начин ще скриете елемента. Същата логика важи и за ng-hide.

Plunkr

person Philipp Gayret    schedule 13.06.2014
comment
Това е страхотно, благодаря ви. Понякога най-простите отговори са най-трудните. Търсих програмен начин за управление на ng-show и преначертаване на интерфейса! - person Chris Southam; 13.06.2014

Скриване или показване в зависимост от това дали списъкът todos не е празен:

<p ng-hide="todos.length >0">No todos found.</p>

<ul ng-show="todos.length > 0">
  <li ng-repeat="todo in todos">{{todo.title}}</li>
</ul>
person pixelbits    schedule 13.06.2014

Можете да създадете изрази за условие за показване или скриване на елементи, например можете да напишете това:

<ul ng-show="todos.length >= 1">
      <li ng-repeat="todo in todos">{{todo.title}}</li>
    </ul>

повече информация за изразите: https://docs.angularjs.org/guide/expression

person Ema.H    schedule 13.06.2014