$ rootScope не обновляется с помощью forEach

0

Смешное поведение? Объект my menus содержит пункты меню, которые в этот момент кода равны = true. этот фрагмент работает на заводе.

angular.forEach($rootScope.menus, function(menu){
   menu = false;
   console.log(menu); // outputs false
})
console.log($rootScope.menus); //values are still equal to true

Казалось бы, хотя значение в цикле устанавливается в false, оно не применяется к $ rootScope или, скорее, не обновляется? Нужно ли применять новое значение?

С уважением,

  • 0
    Почему вы привязываете menus к $rootScope а не к экземпляру $ scope на уровне контроллера?
  • 0
    @ Haymaker87 в идеале это будет директива в любом случае. Не имеет значения, так как поведение сейчас под вопросом, а не архитектура. Мне просто любопытно, почему вышеупомянутое делает то, что делает.
Показать ещё 2 комментария
Теги:
foreach
rootscope

1 ответ

2
Лучший ответ

ForEach имеет копию переданного элемента массива (переданного по значению вместо переданного по ссылке). Для обновления исходного массива используйте $ rootScope.menus [i]:

angular.forEach($rootScope.menus, function (menu, i) {
    $rootScope.menus[i] = false;
});
  • 0
    Спасибо, это работает и действительно имеет смысл сейчас, когда я думаю об этом. Также спасибо, что ответили на вопрос, объясняя поведение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню