2015-02-17 3 views
0

Я работаю с AngularJS, и я сгенерировал объект с свойством size, который содержит массив объектов.ngOptions - значение не определено

var product = [ 
    // .. 
    sizes: [ 
    {choice: 'one', order: 1}, 
    {choice: 'two', order: 2}, 
    {choice: 'three', order: 3} 
    ] 
    //.. 
]; 

На стороне просмотра я генерировать поле выбора, как:

<select ng-init="size = product.sizes[0]" ng-options="size.choice for size in product.sizes" ng-model="size"></select> 

Это работает, но когда я создаю кнопку, чтобы получить текущее выбранное значение выбора возвращает неопределенное: alert($scope.size);

Я продублировал проблему here. Кроме того, только для смеха Я воссоздал одно и то же (?) В другом CodePen here.

Второй работает так, как я хочу, но не первым. Я сделал оба, но я не могу понять, почему второй работает и первый делает.

ответ

2

Это классическая проблема в угловых условиях. Это потому, что вы используете ng-if, который создает дочернюю область. вам нужно установить свою модель в someObject.size и изменить все ссылки на это. А затем в контроллер поместите $ scope.someObject = {};

+0

В качестве альтернативы вы можете использовать ng-show или ng-hide, чтобы избежать создания дополнительной области – Vlad274

+0

@ Влад274, работающий с изменением на 'ng-show'. jw, я думаю, что я действительно не соблюдаю детскую сферу. Можете ли вы создать пример? –

+0

Я предполагаю, что вы можете представить его, как при использовании ng, если вы создаете другой контроллер в этой точке. «Скрытый» угловой контроллер. Поэтому модель размера существует в этом контроллере, а не в вашем «prod» контроллере. Если вы хотите, чтобы «скрытый» контроллер передавал эту модель до вашего «prod» контроллера, вам нужно использовать точечную нотацию, как это рекомендуется угловыми создателями. ng-model должна всегда иметь что-то .somethingelse – jw56578

Смежные вопросы