2016-01-18 2 views
1

Привет, я довольно новичок в программировании углов, и у меня возник вопрос об опциях углового ng.привязка модели ng-options, основанная на свойстве

У меня есть структура объекта, как

TestObj: { name: 'Name1', subNames: ['Subname1'] } 
TestArr: 
    [{ name: 'Name1', subNames: ['Subname1'] }, 
    { name: 'Name2', subNames: ['Subname1'] }, 
    { name: 'Name3', subNames: ['Subname1'] }] 

И я пытаюсь использовать нг-параметры для связывания одного из объектов 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 не понимают, что это тот же объект.

Спасибо

ответ

2

я не рекомендовал бы, следуя примеру в этом jsfiddle. По сути, вы не хотите TestObj И 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 
Смежные вопросы