Переменная $ scope с несоответствием флажка

0

Я борюсь с некоторыми переменными $scope в моем приложении angularjs.

Я хочу визуализировать "Модули", которые имеют серверные "Каналы", и эти каналы могут быть скрытыми/видимыми. Я хочу скрыть каналы во всплывающем канале, дважды щелкнув по этому каналу.

Угловой-контрольный фрагмент:

$scope.dblclick = function(chid) {
    $scope.chclicked = chid;
    $scope.hidden = $scope.moduledata.channels[chid].hidden !== 0 ? true : false;
    $scope.popupvisible = true;
};

$scope.popupok = function() {
    $scope.moduledata.channels[$scope.chclicked].hidden = $scope.hidden === true ? 1 : 0;
    $scope.popupvisible = false;
};

$scope.popupcancel = function() {
    $scope.popupvisible = false;
};

$scope.closePopup = function() {
    $scope.popupvisible = false;
};

Прежде чем показывать всплывающее окно, я устанавливаю (я пытаюсь) текущее 'hidden' значение и channel-id чтобы иметь доступ к ним при закрытии всплывающего окна.

Флажок в popup имеет ng-model="hidden".

Теперь проблема заключается в том, что скрытые значения в moduledata не обновляются и не изменяются, а $scope.hidden всегда сохраняет последнее значение флажка во всплывающем окне - для всех каналов.

Однако $scope.chclicked работает нормально.

Я сделал Plunk для визуализации моей проблемы.

Теги:

1 ответ

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

Посмотрите на следующий Plunker, основанный на вашем.

ng-include создала новую область действия, поэтому причина, по которой вы не можете просто использовать hidden в ng-model во всплывающем шаблоне.

Тебе нужно:

ng-model="moduledata.channels[chclicked].hidden"

Редактировать 1

popup объект был создан для хранения всей информации, связанной с всплывающим окном, включая hidden переменную.

$scope.popup = {
  visible: false,
  url: 'channeleditpopup.html',
  hidden: false
};

Затем во всплывающем шаблоне:

ng-model="popup.hidden"

В функции popupok:

$scope.moduledata.channels[$scope.chclicked].hidden = $scope.popup.hidden ? 1 : 0;

В функции dblclick:

$scope.popup.hidden = false;
  • 1
    @Appeiron В документации Angular JS сказано, что эта директива создает новую область видимости и выполняется с уровнем приоритета 400.
  • 0
    Хорошо, это сработало бы. Но теперь он прячет / показывает мой канал сразу. Я хочу применить изменения только при нажатии «ОК»
Показать ещё 2 комментария

Ещё вопросы

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