Изменения области действия после ng-switch

У меня есть переключатель, который изменяет значение переменной с именем p.

<div ng-switch on="p">
   <div ng-switch-when="true">
       /*...show nodes and ability to add node*/
   </div>
   <div ng-switch-when="false">
       /*for now show nothing*/
   </div>
</div>

В моем контроллере:

$scope.nodes=[{node1},{node2},{node3}];

function to add a node

$scope.$watch('nodes', function(nodes) {
    console.log(nodes); 
    console.log("================");   
},true);

ПРОБЛЕМА: когда я печатаю узлы $scope выше, отображаются все новые узлы. Если я выключаю и включаю (p=false, а затем p=true), у меня есть начальные $scope.nodes. С какой стати мои узлы сбрасываются при переключении? См. этот пример: plunker

EDIT: ng-switch работал без изменения области действия, если у меня не было директивы, но я повторно инициализировал свою область действия, когда использовал внутри нее директиву. Хотя я точно не понял, почему я отказался от ng-switch и вместо этого использовал ng-show.


person Anna    schedule 19.06.2015    source источник
comment
Не понимаю, вы включаете $scope.p, но смотрите $scope.nodes. Когда вы меняете $scope.p?   -  person michelem    schedule 19.06.2015
comment
Вы можете вставить код, который вы используете для добавления узлов в html? и функция добавления узлов   -  person akashrajkn    schedule 19.06.2015
comment
У меня есть такой переключатель: proto.io/freebies/onoff Переключение выполнено. , я меняю взгляды. Проблема в том, почему мои узлы меняются? @akashrajkn узлы меняются с помощью директивы, поэтому я пропустил эту функцию. Поскольку мой console.log показывает, что $scope.nodes обновляются правильно, почему простое изменение представления сбрасывает их?   -  person Anna    schedule 19.06.2015
comment
Вы можете сделать plunker или скрипку? в основном проблема заключается в функции добавления узла, но трудно сказать, пока вы не предоставите более подробную информацию   -  person akashrajkn    schedule 19.06.2015
comment
Если узел определен в рамках текущего представления, переключение представления повторно инициализирует контроллер и, следовательно, область. Возможно, поэтому узлы сбрасываются   -  person Guinn    schedule 19.06.2015
comment
@Guinn да, узел определен в рамках текущего представления, но оба представления используют один и тот же контроллер.   -  person Anna    schedule 19.06.2015
comment
Не должно. Происходит что-то еще. Можете ли вы опубликовать скрипку?   -  person pixelbits    schedule 19.06.2015
comment
Если вы в новом представлении используете что-то вроде ‹div ng-controller=controller›, этот самый оператор говорит приложению повторно инициализировать (или создать вторую область) этого контроллера.   -  person Guinn    schedule 19.06.2015
comment
Ребята, мой код огромен ... Я постараюсь сохранить то, что важно, чтобы сделать скрипку, но до тех пор вы можете придумать какие-либо причины, по которым это может произойти? Спасибо за все ваши ответы   -  person Anna    schedule 19.06.2015
comment
Извините, но этого недостаточно. Вы должны попытаться опубликовать меньший пример вашего кода   -  person michelem    schedule 19.06.2015


Ответы (1)


Это помогло бы увидеть контроллер и на каком уровне он инициализирован. ngSwitch будет не просто скрывать содержимое — он будет удалять и добавлять html и инициализировать контроллеры и директивы каждый раз при переключении. Вероятно, узлы также инициализируются там.

person Michael    schedule 19.06.2015