Backend会像这样返回json:
[
{
id: 1,
name: "the name",
countryIds: [ 1,2,3]
}, ...
]
如您所见,有countryIds
属性。在客户端,我已经使用相应的ID缓存了国家/地区名称:
[
{
id: 1,
name: "USA"
},
{
id:2, name: "France"
}...
]
,所以在检索这些对象时,我只需添加新的countries
属性,我在其中指定国家/地区名称:
obj.countries = getCountryNamesByIds(obj.countryIds);
所以我的初始对象看起来像这样:
{
id: 1,
name: "the name",
countryIds: [ 1,2,3],
countries: ["USA", "France", "England"]
}
问题是,在更新后使用PUT
方法将对象发送到服务器时,我不想将countries
属性发送到服务器。我怎样才能以更优雅的方式处理这种情况?在我看来,几乎没有选择:
1.当向服务器发送对象时,只需删除所有不必要的属性(不好的方法,因为如果将新属性添加到JSON,那么我也需要在控制器逻辑中应用相同的更改);
2.不要使用新的countries
proeprty来装饰对象,并公开一些应用程序级方法,如
$ rootScope.getCountryNamesByIds = getCountryNamesByIds;
然后在模板中使用它:
<label> Countries </label>
<div> {{getCountryNamesByIds(obj.countryIds)}} </div>
3.不要使用新的countries
proeprty装饰对象,并创建名为countryNames
的指令,该指令将根据国家ID生成国家/地区名称(如第2点所示):
<div country-names country-ids="obj.countryIds"> // There will be shown country names generated from their IDs</div>
你怎么想,什么选择更优雅?或者解决我的挑战的其他方法是什么?
答案 0 :(得分:1)
我已多次遇到此问题,并尝试了所有解决方案。一般来说,我会做以下事情:
第三种可能性是将其保存为对象的功能
obj.getCountries = function() {return [["USA", "France", "England"] ]; };
然后在模板中使用它
<div> {{obj.getCountries())}} </div>
仅供参考,我为ng-resource创建了一个补丁方法,所以我只能通过PATCH保存更改。在这里没有帮助,但却是同一个整体问题的一部分。在这种情况下,将它扩展为非常难以说明,&#34;只发回那些已经改变的项目,而不是任何添加的项目&#34;,这也可以解决它。