2016-12-08 1 views
1

У меня есть цикл «нг-повтор» внутринг-повтор с параметрами не возвращает объект в качестве значения

<select ng-model="something"></select> 

таким образом, что каждый параметр в списке отображается в виде

<option> 

внутри select блок. Моя цель - сделать «что-то» (которая является привязанной к выбору ng-моделью) равным выбранному объекту внутри списка. В этот момент, когда я делаю «value =» {{option}} «как параметр опции, у меня есть объект JSON как String, но мне нужно получить объект как объект. Код выглядит так:

<select ng-model="something"> 
    <option ng-repeat="option in list" value="{{option}}">{{option.name}}</option> 
</select> 

То, что я хочу, это легко сделать с помощью нг-вариантов, но мне нужно, чтобы добавить дополнительные «стиль» параметры в зависимости от option.anotherField каждому

<option> 
+1

что структура объекта списка? –

+0

@AnirudhMangalvedhekar, он имеет целочисленный «id», логический «удаленный», два объекта внутри, содержащие строки, «имя», которое является строкой. –

ответ

0

Вы можете использовать ng-value вместо значение, которое дает вам нужный объект:

<select ng-model="something"> 
    <option ng-repeat="option in list" ng-value="option">{{option.name}}</option> 
</select> 
+3

попробовал, дал «[object Object]» как String –

+0

вы можете разместить json? или plunkr? – Yaser

+0

@Yaser спасибо за отличный совет. Но один комментарий, я пытаюсь сделать то же самое, но проверка не изменит значение списка опций, а не? в моем случае это не работает. –

0

насчет подхода через temp прокси, и это отношение с something переменными с помощью ng-change ($scope.setModel) директив:

(function(angular) { 
 
    'use strict'; 
 
angular.module('app', []) 
 
    .controller('ExampleController', ['$scope', function($scope) { 
 
    $scope.list = [{name:'Tom',age:23},{name:'Max',age:33},{name:'Sam',age:43}]; 
 
    $scope.something = $scope.list[0]; 
 
    $scope.temp = $scope.something.name;  
 

 
    $scope.setModel = function(){ 
 
     for(var item of $scope.list) 
 
     if(item.name == $scope.temp){ 
 
      $scope.something = item; 
 
      break; 
 
     }   
 
    }  
 
}]); 
 
})(window.angular);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
    <div ng-app='app' ng-controller="ExampleController"> 
 
    <select ng-change='setModel()' ng-model='temp'> 
 
     <option ng-repeat='option in list track by option.name' ng-attr-title='{{option.age}}'>{{option.name}}</option> 
 
    </select> 
 
    <div>something: {{something | json}}</div> 
 
    </div>