角度编程很陌生,我对角度的ng选项有一个问题。
我有一个对象结构,例如
TestObj: { name: 'Name1', subNames: ['Subname1'] }
TestArr:
[{ name: 'Name1', subNames: ['Subname1'] },
{ name: 'Name2', subNames: ['Subname1'] },
{ name: 'Name3', subNames: ['Subname1'] }]
我正在尝试使用 ng-options 将其中一个 TestArr 对象绑定到 TestObj。
<select class="touchpoint-settings-create-channel-box ng-model="TestObj" ng-options="curTest.name for curTest in TestArr"></select>
但是,有没有办法让 TestObj 绑定到 TestArr 中具有相同"名称"属性的对象?
这个jsfiddle是一个很好的例子,说明了我的意思。 http://jsfiddle.net/KN9xx/840/
当它第一次启动时,selectedPerson 设置为类似于数组中第一项的对象,但 ng-options 没有意识到它是同一个对象。
谢谢
我不建议遵循该jsfiddle中的示例。从本质上讲,您不需要TestObj和TestArr。如果 TestObj 不仅仅是对 TestArr 的引用,它们就不会是同一个对象,并且您正在复制数据,因为 Angular 和 JavaScript 无法识别这两个对象在它们是单独的对象时具有相同的键和值。
您应该遵循此SO帖子中的示例:如何在Angular中使用默认选项.js选择框
与其像现在这样使用TestObj
,不如使用 ng-init
来设置默认值。
var TestArr =
[{ name: 'Name1', subNames: ['Subname1'] },
{ name: 'Name2', subNames: ['Subname1'] },
{ name: 'Name3', subNames: ['Subname1'] }];
<select
class="touchpoint-settings-create-channel-box
ng-init="TestObj = options[0]"
ng-model="TestObj"
ng-options="option.name for option in TestArr">
</select>
为了说明我对对象的观点:
var obj1 = { name: 'Me' };
var obj2 = { name: 'Me' };
虽然obj1
和obj2
看起来完全相同,但变量只是对底层对象的引用,而不是值,JS解释器不知道我打算这两个对象相同。但是,如果您字符串或数字,它的工作方式就像您期望的那样。
var me = 'Me';
var stillMe = 'Me';
console.log(obj1 === obj2); // prints false
console.log(me === stillMe); // prints true