Динамически создавать переменную и присваивать ей значение

У меня есть список объектов. Используя ng-repeat, я привязываю эти объекты к элементам HTML. в моем цикле ng у меня есть кнопка, когда пользователь нажимает на эту кнопку, я хочу показать элементы HTML следующего уровня. Значит, у меня есть внешний цикл ng-repeat (для 1-го уровня) и внутренний цикл ng-repeat (для 2-го уровня). Для отображения внутренних элементов HTML, например тега, мне нужно использовать ng-show.

Но если я использую одну переменную, все остальные элементы второго уровня также видны. Я хочу, чтобы отображался только определенный HTML.

Как я могу привязать ng-show к переменной и как я могу установить значение этой переменной.


person user4130978    schedule 16.12.2014    source источник
comment
Опубликуйте фактический код и то, что вы пробовали - мало что можно получить только из этого описания.   -  person tymeJV    schedule 17.12.2014
comment
Извините, tymeJV, у меня не было времени отредактировать исходный код офиса и опубликовать его здесь. Спасибо.   -  person user4130978    schedule 17.12.2014


Ответы (2)


Я думаю, что вам нужно определить переменную уровня элемента внутри ng-repeat.

Вы можете установить переменную уровня элемента с помощью ng-init. Эта переменная будет создана в дочерней области, созданной для каждой итерации ng-repeat.

Затем вы можете переключать (или применять любую логику) эту переменную с помощью кнопки. Затем я предлагаю использовать ng-if вместо ng-show, чтобы предотвратить создание элементов DOM для элементов, которые пользователь не хотел видеть.

<div ng-repeat="outerItem in outerList" ng-init="show = false">
   <button ng-click="show = !show">show/hide inner</button>
   <div ng-if="show" ng-repeat="innerItem in innerList">
     ...
   </div>
</div>
person New Dev    schedule 16.12.2014
comment
Спасибо New Dev за то, что дал мне хорошее направление. я просто вместо того, чтобы показать, я создал динамическую переменную, подобную этой ng-init=this['obj_'+obj.item1]=false - person user4130978; 17.12.2014

Немного сложно точно сказать, что вы имеете в виду, основываясь на вашем описании, но вы можете связать ng-show с функцией, которая передает имя, а затем возвращает true или false в зависимости от этого.

        <div ng-show="checkIfShow('dynamicName')">Something</div>


        $scope.checkIfShow = function(name) {
           // check name for whatever you are looking for to show/hide and return true/false
        };

Вы можете легко создать карту в JS, где переданное «имя» является ключом, и привязать к нему.

person Scott    schedule 16.12.2014