2016-07-21 5 views
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, чтобы иметь доступ к ним при закрытии всплывающего окна.

Флажок в выпадающем списке ng-model="hidden".

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

$scope.chclicked работает нормально, хотя.

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

ответ

1

Пожалуйста, смотрите на the following Plunker на основе вашего.

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

Понадобится:

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

Edit 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 Говорят, в [Угловая JS docum entation] (https://docs.angularjs.org/api/ng/directive/ngInclude), что эта директива создает новую область и выполняется на уровне приоритета 400. –

+0

Хорошо, это сработает. Но теперь он прячет/скрывает мой канал немедленно. Я хочу применить изменения только при нажатии «ОК» – Draz

+0

@Draz Я обновил Plunker. Пожалуйста, посмотри на это. –

Смежные вопросы