Угловое изображение не обновляется должным образом при нажатии ng

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

В первом элементе списка я хочу записать выбранное значение со следующего уровня, во втором я успешно перечислил все элементы с первого уровня, а на третьем я хочу отобразить описание второго (последнего) уровня.

Мой код выглядит так:

    <div ng-if="selected.type=='number' && selected.values[0].values">
            <ul class="smsUl">
                <li ng-if="selected.selected">
                    <button class="btn btn-warning btn-block">{{selected.selected}}</button>
                </li>
                <li ng-repeat="value in selected.values" ng-if="attributes == undefined">
                    <button class="btn btn-info btn-block" ng-click="$parent.attributes=value.values">{{value.value}}</button>
                </li>
                <li ng-repeat="attribut in attributes" ng-if="attributes != undefined">
                    <button class="btn btn-info btn-block" ng-click="selected.value=attribut.id; selected.selected=attribut.value; attributes=undefined">{{attribut.value}}</button>
                </li>
            </ul>
        </div>

И часть Джейсона с selected.values ​​выглядит так:

  [
  {
    "value": "clothing_glasses",
    "values": [
      {
        "id": 1,
        "value": "coat"
      },
      {
        "id": 2,
        "value": "glasses"
      }
    ]
  },
  {
    "value": "book_stationery",
    "values": [
      {
        "id": 3,
        "value": "book"
      },
      {
        "id": 4,
        "value": "document"
      }
    ]
  }
]

В выражении nf-if я попытался:

!attributes

но ничего не изменилось.

Обновить:

Если я установлю переменную атрибута в контроллере статически, он перечисляет содержимое, которое я хочу, но если я выбираю, я должен вернуться к 1. уровню.

1 ответ

Вы уверены, что не делаете что-то подобное в контроллере:

$scope.attributes = [someArray]

(bla bla, some code)

$scope.someOnClickFunction = function() {
    $scope.attributes = [otherArray]
}

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

Я рекомендую создать какой-нибудь объект, например. "наблюдаемый", поместите туда все эти "атрибуты", "выбранные" и т. д. и добавьте в свой контроллер:

$scope.$watchCollection('observable.attributes', function() {});
$scope.$watchCollection('observable.selected', function() {});

и когда вы хотите что-то изменить в этих массивах, не заменяйте их (применяя новые массивы к старой переменной). Если вы не хотите играть с элементами pushgin, shifting, poping, вы всегда можете использовать:

someDefinedArray.length = 0;
for-loop {
    someDefinedArray.push(yoursobjects); //push objects back to array but with changes you wanted to make to array
}
Другие вопросы по тегам