嗨,我对角度编程很新,我对角度的ng-options有疑问。
我有像
这样的对象结构fail
我正在尝试使用ng-options将其中一个TestArr对象绑定到TestObj。
TestObj: { name: 'Name1', subNames: ['Subname1'] }
TestArr:
[{ name: 'Name1', subNames: ['Subname1'] },
{ name: 'Name2', subNames: ['Subname1'] },
{ name: 'Name3', subNames: ['Subname1'] }]
但是,有没有办法让TestObj绑定到TestArr中具有相同“name”属性的对象?
这个jsfiddle是我的意思的一个很好的例子。 http://jsfiddle.net/KN9xx/840/
首次启动时,selectedPerson设置为类似于数组中第一项的对象,但ng-options没有意识到它是同一个对象。
谢谢
答案 0 :(得分:2)
我不建议按照jsfiddle中的示例进行操作。基本上,您不需要TestObj AND TestArr。如果TestObj不仅仅是对TestArr的引用,它们将不会是同一个对象,并且您正在复制数据,因为当它们是单独的对象时,Angular和JavaScript无法识别这两个对象具有相同的键和值。
您应该按照此SO帖子中的示例进行操作:How to have a default option in Angular.js select box
不要像使用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