Angularjs ngClass未正确渲染
我正在加载一个todo列表,每个todo都有一个标志字段,如果为true,则应应用Angularjs ngClass未正确渲染,angularjs,ng-class,Angularjs,Ng Class,我正在加载一个todo列表,每个todo都有一个标志字段,如果为true,则应应用ng类。将数据加载到页面时,如果我使用ng class=“{'completed':todo.isCompleted=='true'}”,则会应用ng class,但当我使用复选框时,它不起作用 另一方面,如果我使用ng class=“{'completed':todo.isCompleted==true}”(不带true上的引号),它会加载数据,而不会在开始时应用ng class,这意味着加载所有数据就好像它们都
ng类。将数据加载到页面时,如果我使用ng class=“{'completed':todo.isCompleted=='true'}”
,则会应用ng class
,但当我使用复选框时,它不起作用
另一方面,如果我使用ng class=“{'completed':todo.isCompleted==true}”
(不带true
上的引号),它会加载数据,而不会在开始时应用ng class
,这意味着加载所有数据就好像它们都是false一样,但在使用复选框时效果良好
这让我抓狂,我不知道为什么
<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>
非常感谢您的帮助。您是否尝试过更改
ng-class="{'completed': todo.isCompleted==true}"
到
或者,其中之一
ng-class="todo.isCompleted ? 'completed' : ''"
ng-class="{true: 'completed', false: ''}[todo.isCompleted]"
因此,您的服务器似乎将布尔值返回为字符串,这就是绑定不起作用的原因
您可以更改服务器的返回值(首选值),或将ng真值
和ng假值
添加到复选框中,并使用字符串比较将绑定保持在ng类
上:
<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>
-
{{todo.title}
希望这有帮助compete()做什么?显示控制器代码。请检查我的编辑。我只需将标志上的更改保存到数据库。{'completed':todo.isCompleted==true}
应该可以正常工作。还有一些事情正在发生,可能是您的数据发生了变化。这样,它们会加载应用的ng类,就好像它们都是假的一样。最后一个成功了,但有时不会。找不到标准,但我想说与公认解决方案中提到的布尔/字符串问题有关。谢谢。很好,问题已经解决了!这很有魅力!这绝对是一个字符串/布尔值问题。对于商品,我已经添加了两个ng真值和ng假值,所以我不必经历控制器中的所有更改。谢谢。太好了,重要的是你知道出了什么问题。
ng-class="todo.isCompleted ? 'completed' : ''"
ng-class="{true: 'completed', false: ''}[todo.isCompleted]"
<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>