Javascript 对AngularJS中的不同对象使用ng选项

Javascript 对AngularJS中的不同对象使用ng选项,javascript,angularjs,Javascript,Angularjs,我有一个数组things,其中包含不同的对象,例如2个不同的对象: {name: 'book', value: '5', color: 'blue'} 及 现在,我想使用ng选项在droplist中显示所有这些内容。 所以我可以做到: ng options=“(thing.name+”、“+thing.value+”、“+thing.color)”表示事物中的事物“ 如果当前对象是一本书,它将很好,但如果它是一支笔,我会弄得一团糟。 是否有可能区分我想在droplist中显示的对象,或者有更

我有一个数组
things
,其中包含不同的对象,例如2个不同的对象:

{name: 'book',
value: '5', 
color: 'blue'}

现在,我想使用
ng选项
在droplist中显示所有这些内容。 所以我可以做到:

ng options=“(thing.name+”、“+thing.value+”、“+thing.color)”表示事物中的事物“

如果当前对象是一本
,它将很好,但如果它是一支
,我会弄得一团糟。
是否有可能区分我想在droplist中显示的对象,或者有更好的做法?

您可以做的一件事是将对象复制到新对象中

比如:

var mergedObj=angular.copy(bookThing);//将bookThing克隆到mergedObj
angular.extend(mergedObj,penThing);//使用penThing的内容扩展mergedObj

现在在下拉列表中使用mergedObj。您可能需要使用
ng选项中的
track
by来说明哪个属性是您的密钥

比如:


ng options=“item.name for item in mergedObj track by item.name”

理论上,您可以在模板中执行一些if'ing和else'ing,以使数据字段保持一致,例如

ng options=“(thing.name+”,“+(thing.value?(thing.value+”,“+thing.color):(thing.length))”for things in things“

…但这就像sin一样难看,而且很难维护,特别是如果
things
数组中有两种以上的不规则对象类型。您最好在directive link函数中提前处理数据,以生成一个包含要嵌入的选项字符串的干净数组

例如,若您要查找的只是每个“thing”中以逗号分隔的字段列表:


你想在一个下拉列表中显示两个对象的所有选项吗?是的,这就是我想做的。谢谢,我一直在搜索像你丑陋的方法这样的东西。在我的情况下,没关系,因为范围不会变得更复杂。你能更准确地解释一下你在第二个选项中做了什么吗?那是什么
map
?都是vanilla js的一部分:
Array.map()
是一种基于数组Y的内容生成数组X的方便方法。(如果愿意,您可以使用angular的
$filter
服务来执行大致相同的操作,或者只需在
循环中为..编写一个普通的
,并手动构造返回的数组。)
Object.keys(foo)
仅返回foo中所有字段名的数组(然后我使用
.join(',')
将其连接成逗号分隔的字符串)
{name:'pen', 
length: '10'}
scope.myCleanOptions = things.map(function(thing) {
    return Object.keys(thing).join(", "); // or whatever
});