2013-12-20 98 views
1

我完全沉迷于这一个。一切工作正常(或现在足够好),我需要的是将数据以非json格式返回工厂。我有一个semi-working plunker的所有细节。从angularjs工厂检索对象属性

基本上,第一页(在Ctrl控制器下)是用户可以检查一堆盒子的地方。在选项集之间还有一个ng-switch(真正的东西比这些要多很多,所以listboxFactory保留了用户的选择)。当用户转到下一个页面(或者因为伪造它而在蹲点中的“下一页”)时,他们可以看到他们选择了什么。然后这些选择会被包装在一个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}} 

的作品是{{项目}}和勿庸置疑这是很丑陋的唯一的一个。有没有人遇到过这个,并有任何提示如何解决这个问题?提前谢谢了。

回答

1

使用@会将您的对象转换为字符串,您应该只使用对item对象的引用,而使用=

变化{{item}}只是item作为参考:

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

在指令中使用=

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

看到updated plunker

+0

我不知道是否在手舞足蹈,这是这么容易,或者因为完全忽略@细节而惭愧。非常感谢! – kl02