2015-09-11 2 views
1

Howdie сделать,Угловых нг-повтор, игнорируя вложенные нг-если

Я пытаюсь отображать только вариант, если код, который клиентом использует для входа, совпадает с $ scope.code в контроллере.

Затем в HTML должен отображаться параметр, соответствующий коду, в который входит клиент.

Вид:

<div class=""> 
<select id="customer-dd" ng-model="selectedCustomer" ng-repeat="(group, msg) in codes"> 
    <option value="">select...</option> 
      <div ng-if=" 'group' == 'code' "> 
       <option value="{{ group }} ">{{ msg }}</option> 
      </div> 
</select> 
</div> 

Контроллер:

$scope.code = dataFactory.getCode(); 
$scope.codes = { 

'ABC': 'First option', 
'DEF': 'Second option' 
} 

Там должен быть только один вариант, показывающий, как клиент не может войти в систему с более чем одним кодом в то время

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

Что-то я здесь не хватает?

* UPDATE *

Я обновил код на следующие и несколько вариантов по-прежнему печатаются:

<div class=""> 
<select id="customer-dd" ng-model="selectedCustomer" ng-repeat="(group, msg) in codes"> 
    <option value="">select...</option> 
     <div ng-if=" group == code "> 
      <option value="{{ group }} ">{{ msg }}</option> 
     </div> 
</select> 
</div> 

* UPDATE * @ieaglle Удаление DIV позволило если заявление для excecute. Обновленный HTML:

<div class=""> 
<select id="customer-dd" ng-model="selectedCustomer" ng-repeat="(group, msg) in codes"> 
    <option value="">select...</option> 
    <option ng-if=" group == code " value="{{ group }} ">{{ msg }}</option> 
</select> 
</div> 

THANKKKK UUUU !!!

+0

Какая версия углового? – PSL

+0

вы делаете это неправильно, удалите одинарную цитату из группы – maddygoround

+0

Благодарим вас за ответ, однако даже когда я удаляю одиночные кавычки, я все равно получаю каждый вариант, а не только один – Jimmy

ответ

1

Попробуйте использовать ng-options вместо фильтрованного объекта.

http://jsfiddle.net/joshdmiller/hb7lu/

HTML:

<select ng-model="selectedCustomer" ng-options="msg for (group, msg) in filterObjsByProp(codes)"></select> 

JS:

$scope.code = 'ABC'; 
$scope.codes = { 

    'ABC': 'First option', 
     'DEF': 'Second option' 
}; 

$scope.filterObjsByProp = function (items) { 
    var result = {}; 
    angular.forEach(items, function (value, key) { 
     if (key === $scope.code) { 
      result[key] = value; 
     } 
    }); 
    return result; 
} 

Хотя это перебор, так как объект не может иметь несколько свойств с тем же именем, так что вы будете только когда-либо 1 в выборе. Таким образом, возможно, выбор не самый лучший вариант здесь, или, может быть, массив с объектами key/value лучше.

+0

Спасибо за ваш ответ, однако даже когда я удаляю одиночные кавычки, я все равно получаю каждый вариант, а не только номер – Jimmy

0

Измените свой HTML-код на это. Обратите внимание на изменение в инструкции ng-if.

<div class=""> 
<select id="customer-dd" ng-model="selectedCustomer"> 
    <option value="{{ group }}" ng-repeat="(group, msg) in codes">select... 
      <div ng-if=" group == code "> 
       {{ msg }} 
      </div> 
    </option> 
</select> 
</div> 
+0

Благодарим вас за ответ, однако даже когда я удаляю одиночные кавычки, я все равно получаю каждую опцию, напечатанную вместо одного – Jimmy

+0

Я сделал некоторые изменения. Сначала я переместил цикл на уровень опций и удалил вложенную опцию. Возможно, это то, что вы ищете. – Matt

+0

Тем не менее, то же самое. Он печатает оба варианта, а не только тот, который соответствует коду – Jimmy

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