2016-10-20 2 views
0

Я пытаюсь получить поле выбора, работающее в Angular. Проблема, с которой я столкнулся, - это сделать с ng-init и установить значение по умолчанию для объекта, созданного во время выполнения. Heres мой код:Угловой выбор, ng-init с динамическим значением

 <select 
      ng-model="settings.editing.panel.data.production_company" 
      ng-change="settings.editing.panel.data.production_company = selectValue" 
      ng-init="selectValue = settings.editing.panel.data.production_company" 
     > 
      <option 
       ng-repeat="(key, value) in lists.production_companies" 
       value="{{key}}" 
       ng-selected="{{selectValue}}" 
       > 
        {{value}} 
       </option> 
     </select> 

«lists.production_companies» является простой ключ-значение массива имен, заселена во время начальной страницы визуализации, обновляемый AJAX.

Объект «settings.editing.panel.data» начинает свою жизнь как NULL, но позже загружается правильно отформатированным объектом, который содержит свойство «production_company».

Я нашел установку ng-init чем-то вроде «ng-init =» selectValue = 3 »отлично работает. Установка $ scope.test = 3, тогда установка« ng-init = »selectValue = test« отлично работает слишком.

Однако мое динамическое значение не работает. Как я могу использовать свой динамически созданный объект для установки значения этого окна выбора во время выполнения с настройкой, которую у меня есть?

+0

использовать ngOptions вместо ngRepeat для выбора – Grundy

+0

Почему вы используете нг-модель, если вы будете поддерживать значение с нг-изменения? Читайте о работе ng-модели в выбранном компоненте –

+0

Это было связано с моим недоразумением и частью, связанной с тем, что модель не работает по неизвестной причине. С тех пор я решил это, переработав проблему. В этом случае моя модель не была установлена ​​первоначально, если модель загружалась после запуска времени выполнения через ajax. – kirgy

ответ

0

В моей ситуации я был в состоянии изменить формат движки данных, чтобы установить объект как:

{"id": 1, "name":"prod comp 1"} 

, а затем соответствующим образом измените мою модель. Оглядываясь назад, мне все равно понадобилось это для ID.

<select 
    ng-model="settings.editing.panel.data.production_company" 
> 
    <option 
     ng-repeat="option in settings.lists.production_companies" 
     value="{{option.id}}" 
     ng-selected="{{option.id}} == settings.editing.panel.data.production_company" 
    > 
     {{option.name}} 
    </option> 
</select> 
0

Вы сомневаетесь, меня как-то путают. Следующий фрагмент - это working, это то, что вы хотите?

'use strict'; 
 
angular.module('DemoApp', []); 
 
angular.module('DemoApp').controller('DemoCtrl', ['$scope', function($scope){ 
 
    $scope.lists={ 
 
    \t production_companies: { "0": "prod 1", "1":"prod_2" }, 
 
    }; 
 
    $scope.settings={ 
 
    \t editing: { 
 
    \t panel: { 
 
     \t data: null 
 
     } 
 
    } 
 
    }; 
 
    $scope.setData=function(data){ 
 
    $scope.settings.editing.panel.data={ 
 
     production_company: data 
 
    }; 
 
    }; 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="DemoApp" ng-controller="DemoCtrl"> 
 
<select ng-model = "settings.editing.panel.data.production_company"> 
 
    <option ng-repeat = "(key, value) in lists.production_companies" value = "{{key}}">{{value}}</option> 
 
</select> 
 
<div>You select: {{settings.editing.panel.data.production_company}}</div> 
 
<button ng-click="setData('0')">Set Data to Prod1</button> 
 
<button ng-click="setData('1')">Set Data to Prod2</button> 
 
</div>

+0

settings.editing.panel.data устанавливается во время нажатия кнопки следующим образом: «$ scope.settings.editing.panel.data = angular.copy (object)», именно поэтому я понимаю, что это может быть причиной проблема