Angularjs ngModel复选框未显示为选中状态

Angularjs ngModel复选框未显示为选中状态,angularjs,checkbox,angular-ngmodel,Angularjs,Checkbox,Angular Ngmodel,我在获取复选框以显示模型的正确状态(选中/未选中)时遇到一些问题。我的控制器中有以下各项: app.controller('PhotosCtrl', ['$scope', function($scope) { $scope.form = {}; $scope.editPhotos = { token: $scope.token, idArray: $scope.idArray }; }]); 我的表单如下所示: <form acce

我在获取复选框以显示模型的正确状态(选中/未选中)时遇到一些问题。我的控制器中有以下各项:

app.controller('PhotosCtrl', ['$scope', function($scope) {
    $scope.form = {};
    $scope.editPhotos = {
        token: $scope.token,
        idArray: $scope.idArray
    };
}]);
我的表单如下所示:

<form accept-charset="UTF-8" name="editPhotosForm" ng-submit="submit(editPhotos);" multipart="true" novalidate>
    <input name="utf8" type="hidden" value="✓">
    <input name="authenticity_token" type="hidden" ng-model="editPhotos.token" ng-init="editPhotos.token='<%= form_authenticity_token %>'">
    <div class="results-label"><b>{{total_count}}</b> <span ng-if="total_count == 1">Photo</span><span ng-if="total_count != 1">Photos</span> Found</div>
    <div>
        <div class="col">
            <a ng-repeat="r in results" class="card result-link">
                <div class="content result">
                    <div class="caption">
                        <input type="checkbox" ng-model="idArray[r.id]">
                    </div>

                    <div class="image-container" ng-style="{'background-image': 'url(' + r.image_url + ')'}">
                    </div>
                </div>
            </a>
        </div>
    </div>
</form>
这是由我的中继器中的
nginit
生成的,因为照片的ID无法事先知道

下面是
结果的样子:

{
    id: 1290,
    company_id: null,
    image_url: "http://s3.amazonaws.com/mybucket/photos/images/000/001/290/original/214.JPG?1432217895"
}
执行以下操作

    ng-init="idArray[r.id] = 'false'"
您正在将字符串值
'false'
分配给对象

你不能在你的控制器里处理吗

$scope.idArray = {};
for (var i = 0; i < $scope.results.length; ++i){
    $scope.idArray[$scope.results[i].id] = (i%2 == 0);
}
小提琴:


您希望发生什么,以及会发生什么?没有要迭代的
结果
数组,儿子,我不知道你怎么能看到任何复选框。您将字符串
'false'
与布尔值
false
混淆。在我的中继器中,我将哈希键初始化为
'false'
,而不是
false
,因为
ng true value
ng false value
的值始终是字符串。
results
数组是在AJAX调用的
$scope
上定义的,AJAX调用返回数据库中的照片列表。我将在上面的问题中添加
idArray
的结构以供参考。在阅读我的答案时,我发现我的答案可能有问题,具体取决于对象
结果的数据结构。你能发布一个示例吗?我刚刚在我的问题中添加了一个片段。你的结果是这个对象的数组?所以我从我的中继器中删除了
ng init
,现在我只有
。这将生成一个类似于
{1291:true}
的哈希,但复选框仍然没有显示正确的状态。它总是未选中。我做了一个小小的更改
ng model=“$parent.idArray[r.id]”
。你能测试一下吗?ng repeat为每个元素创建一个新范围。因此您的ng模型在子范围内。如果使用
$parent.idArray[r.id]
,则运气不佳。我还尝试了
$parent.editPhotos.idArray[r.id]
,但没有成功。如果我
console.log($scope.idArray)
得到了正确的数据结构,那么选中该框就是在做一些事情。我注意到,当我单击复选框时,一个键
id:true
被添加到
idArray
。该复选框仍然未选中。如果我再次单击它,我希望从数组中删除键,或者更改值。这两种情况都没有发生。您的复选框位于锚定中。也许这就是这个问题的原因。当你这样做时,并不是每个浏览器的反应都是一样的。你能试试这个更新版本吗?(还有新提琴)
$scope.idArray = {};
for (var i = 0; i < $scope.results.length; ++i){
    $scope.idArray[$scope.results[i].id] = (i%2 == 0);
}
    <div class="col">
        <div ng-repeat="r in results" class="card result-link">
            <div class="content result">
                <div class="caption">
                    <input type="checkbox" ng-model="idArray[r.id]">
                </div>

                <div class="image-container" ng-style="{'background-image': 'url(' + r.image_url + ')'}">
                </div>
            </div>
        </div>
    </div>