0

我有这个数据结构,搜索:

{
    id: '1',
    name: 'Foo'
    service_ids:
    [
        3,
        8,
        12
    ]
}

然后,我有另一个数据结构 services,它与上面的 service_ids 中的 id 匹配,如下所示:

[
    {
        id: 3,
        name: 'Fighter'
    },
    {
        id: 4,
        name: 'Typhoon'
    },
    {
        id: 8,
        name: 'Kung'
    },
    {
        id: 12,
        name: 'Builder'
    }
]

我想使用 AngularJS 以表单形式显示它。名字很好。我想将所有可能的服务显示为复选框,如果搜索选中了其中一​​项服务,则在复选框中打勾。就像是:

<li ng-repeat="search in searches">
    <input ng-model="search.name">
    <ul>
        <li ng-repeat="service in services">
            <input type="checkbox">
            {{service.name}}
        </li>
    </ul>
</li>

我不知道如何将该复选框链接到 service_ids 和服务。任何帮助表示赞赏。

我正在使用 $resource。

4

2 回答 2

1

更新

忽略我的回答,误读了您的嵌套请求。

如果有人需要嵌套指导,请参见下文:

我发现嵌套在角度中的最佳方法是创建一个模板,它知道这样的子项:

<script type="text/ng-template"  id="tree_item_renderer.html">
 <span>{{tag.Name}}</span>
   <ul ng-show="tag.Children.length > 0">
        <li ng-repeat="tag in tag.Children" ng-include="'tree_item_renderer.html'" ></li>
   </ul>
</script>

<ul class="tag-list">
      <li ng-repeat="tag in tags" ng-include="'tree_item_renderer.html'" ></li>
 </ul>
于 2013-07-12T11:15:53.210 回答
0

如果我理解你的问题,它应该很简单:

<input type="checkbox" ng-model="search.service_ids[service.id]">

而且您还应该获得双向绑定。

更新

刚刚意识到 search.service_ids 是一个数组而不是一个地图。所以上面的解决方案是不准确的。您可能想改用过滤器:

<input type="checkbox" ng-checked="search.service_ids | contains:service.id">

然后

filter('contains', function() {
    return function(haystack, needle) {
        return haystack.indexOf(needle) >= 0;
    }
});
于 2013-07-12T11:19:38.523 回答