2015-02-21 3 views
0

Я загружаю список todos, каждый todo имеет поле флага, которое, если истинно, должно применяться ng-class. При загрузке данных на страницу ng-class применяется, если я использую ng-class="{'completed': todo.isCompleted=='true'}", но тогда он не работает, когда я играю с флажками.ngClass не отображается должным образом

С другой стороны, если я использую ng-class="{'completed': todo.isCompleted==true}" вместо (без кавычек на true), он загружает данные без применения ng-class в начале, означает загрузку всех, как будто они являются ложными, но он отлично работает при воспроизведении с флажками.

Это сводило меня с ума, не мог понять, почему.

<ul id="todo-list"> 
    <li ng-repeat="todo in todos" ng-class="{'completed': todo.isCompleted==true}" class="editing"> 
     <div class="view" > 
      <input class="toggle" type="checkbox" ng-click="complete(todo)" ng-model="todo.isCompleted" ng-checked="{{todo.isCompleted}}"> 
      <label ng-hide="isEditing" ng-dblclick="isEditing = !isEditing">{{todo.title}}</label> 
      <button class="destroy" ng-click="remove(todo)"></button> 
     </div> 
     <input class="edit" ng-show="isEditing" ng-model="todo.title" ng-blur="isEditing = !isEditing;edit(todo);"> 
    </li> 
</ul> 

Контроллер

$scope.complete = function(todo) { 
    $scope.insertTodo(todo, UPDATE); 
}; 

Любая помощь приветствуется.

+0

что конкурировать() делать? Покажите нам код контроллера. –

+0

Проверьте мой EDIT. Я просто перехожу и сохраняю изменения на флаге в базе данных. – mzereba

+0

'{'completed': todo.isCompleted == true}' должен работать нормально. Что-то еще происходит, может быть, ваши данные меняются. –

ответ

1

Итак, это выглядит как ваш сервер возвращается в логическое значения как строки, поэтому ваши привязок не работают ...

Вы можете либо изменить возвращаемые значения вашего сервера (предпочтительным) или добавить ng-true-value и ng-false-value к вашей флажок и держать связывание на ng-class с помощью строки Сравнение:

<ul id="todo-list"> 
    <li ng-repeat="todo in todos" ng-class="{'completed': todo.isCompleted=='true'}" class="editing"> 
     <div class="view" > 
      <input class="toggle" type="checkbox" ng-click="complete(todo)" ng-model="todo.isCompleted" ng-checked="{{todo.isCompleted}}" ng-true-value="'true'" ng-false-value="'false'"> 
      <label ng-hide="isEditing" ng-dblclick="isEditing = !isEditing">{{todo.title}}</label> 
      <button class="destroy" ng-click="remove(todo)"></button> 
     </div> 
     <input class="edit" ng-show="isEditing" ng-model="todo.title" ng-blur="isEditing = !isEditing;edit(todo);"> 
    </li> 
</ul> 

Надежда, что помогает

+0

Это работало как шарм! Это определенно строка/логическая проблема. Для товара я добавил два значения ng-true-value и ng-false, поэтому мне не нужно проходить все изменения в контроллере. Благодарю. – mzereba

+0

Отлично, важно то, что вы поняли, что происходит не так. – Fedaykin

1

Вы пытались изменить

ng-class="{'completed': todo.isCompleted==true}" 

в

ng-class="{'completed': todo.isCompleted}" 

Или один из тех

ng-class="todo.isCompleted ? 'completed' : ''" 
ng-class="{true: 'completed', false: ''}[todo.isCompleted]" 
+1

Таким образом, они загружаются с применением класса ng, как будто все они ложны. – mzereba

+0

Последний работал, но иногда это не так. Не удалось найти критерии, но я бы сказал, что это связано с проблемой boolean/string, упомянутой в принятом решении. Благодарю. – mzereba

+0

Хорошо, что проблема исправлена! – vtor

Смежные вопросы