Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ngClass未正确渲染_Angularjs_Ng Class - Fatal编程技术网

Angularjs ngClass未正确渲染

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,这意味着加载所有数据就好像它们都

我正在加载一个todo列表,每个todo都有一个标志字段,如果为true,则应应用
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>