从angularjs工厂检索对象属性

时间:2013-12-20 20:25:14

标签: json angularjs ng-repeat

我完全被这个问题困住了。一切都工作正常(或现在足够好),我所需要的只是以非json格式将数据从工厂中取出。我有一个semi-working plunker的所有细节。

基本上,第一页(在Ctrl控制器下)是用户可以检查一堆盒子的地方。在各组选项之间还有一个ng-switch(真实的东西比这些更多,更大的列表),因此checkboxFactory维护用户的选择。当用户进入下一页(或者因为伪造它而在plunker中的“下一页”)时,他们可以看到他们选择的内容。然后这些选择将被包装在json帖子中回到服务器。我需要显示用户友好的名称,但也需要为服务器选择id#。

如果我将value =“{{item.name}}”放在原始复选框ng-repeat中,一切都很好。除了事实,我有一个名称工厂,而不是服务器所需的ID。在工厂中执行第二个数组(一个用于选定的名称,一个用于相应的选定ID)似乎有点矫枉过正,理论上我只能将每个选择添加为对象,并在第二页上根据需要提取属性。

实际上,它不起作用。如果我在选择之后回应工厂,那么这就是我得到的结果:

[ "{\"id\":1,\"name\":\"Firstplace\"}", "{\"id\":2,\"name\":\"Second place\"}" ]

...而且我不确定,但是那些反斜杠似乎将每个选项都变成了字符串,因为方括号里面有引号。我已经尝试在脚本中编辑第54行,但是我收到了错误。它不喜欢这个:

if (checked && index == -1) {
    if (setup) elem.prop('checked', false);
    else scope.list.push({
        id:"scope.value.id",
        name:"scope.value.name"
    });

在HTML方面,它不喜欢我在ng-repeat中尝试过的任何变体。似乎所有梦魇的来源都是推动创造变形的json。我已经尝试了所有这些第二页/输出:

{{item}}
{{item.name}}
{{item.item.name}}

唯一有效的是{{item}},毫不奇怪,它非常丑陋。有没有人遇到过这个,并有任何关于如何解决这个问题的提示?非常感谢提前。

1 个答案:

答案 0 :(得分:1)

使用@会将您的对象转换为字符串,您只需使用对item对象的引用,然后使用=

{{item}}改为item作为参考:

<input type="checkbox" name="group1" value="item" ng-model="isChecked" checkbox-list='checkedCity' />

在指令中使用=

scope: {
  list: '=checkboxList',
  value: '='
},

请参阅updated plunker