오버레이를 사용하려고하는 AngularJS 앱이 있습니다. 기본적으로 두 개의 패널이 있으며 사용자가 패널을 클릭하면 클릭 된 패널에 $scope.selectedPanel
을 설정하고 오버레이를 표시해야합니다. 대신 데이터 바운드 $scope.selectedPanel
을 통해 오버레이를 업데이트하지 않고 오버레이를 표시합니다. 개체를 업데이트하지만이 변경 내용은 사용자에게 표시되는 내용에 반영되지 않습니다.
$scope.panels = [];
$scope.selectedPanel = "";
$scope.panels.push(
{panelID:1,
title:"Panel #1",
room:"",
startTime: "Friday 2:30 PM",
endTime: "Friday 3:30 PM",
hostedBy: "The Host",
description:"This is a description of the panel"}
);
$scope.panels.push(
{panelID:2,
title:"Panel #2",
room:"",
startTime: "Friday 3:30 PM",
endTime: "Friday 3:30 PM",
hostedBy: "The Host",
description:"This is a description of the panel"}
);
$scope.pickEvent = function(panel){
setTimeout(function() {
$scope.selectedPanel = panel;
document.getElementById('overlay').style.display = 'block';
}, 1000);
}
오버레이 HTML
<div id="overlay">
<div id="overlayContainer">
<div class="card">
<p>{{selectedPanel.title}}</p>
</div>
</div>
</div>
01 selectedPanel & 초기 변수를 설정하는 HTML
<div ng-click="pickPanel(panel);" ng-repeat="panel in panels track by $index">
<p>{{panel.title}}</p>
</div>
자바 스크립트 호출
그런데 처음으로 패널 중 하나를 클릭하면 pickEvent
메서드로 이동하고 선택한 이벤트를 설정 한 다음 오버레이를 표시합니다. 그러나 오버레이는 본질적으로 1 단계 뒤입니다. 따라서 첫 번째 패널을 처음 클릭하면 오버레이에 null
제목이 표시됩니다. 그러나 닫고 두 번째 패널을 클릭하면 내가 선택한 첫 번째 패널의 제목이 표시됩니다. 그런 다음 세 번째 패널을 선택하면 내가 선택한 두 번째 패널이 표시됩니다.
AngularJS에 누락 된 것이 있습니까? 특히 $scope.selectedPanel
을 전달 된 패널에 설정하면 오버레이 HTML을 강제로 새로 고칩니다.
나는 실패한 부분에 대해 이미 ng-click을 사용하고 있습니다. onclick은 오버레이를 끄는 함수 일뿐입니다. onClick을 완전히 제거해도 완전히 도움이되지 않았습니다. 나는 이것을 반영하기 위해 원래의 질문을 편집했다. 또한 '$ scope.apply()'를 어디에서 호출해야합니까? 'overlay' 디스플레이를'block'으로 설정 한 후에 pickEvent 메서드에서 시도해 보았지만 여전히 업데이트되지 않았습니다. –
'$ scope.selectedPanel = panel;'후에 호출하면 콘솔에서 오류가 발생합니까? – emed
아아, 그것은'$ scope. $ apply()'였습니다 - 어떤 이유로 콘솔 오류가 발생하지 않았으므로 걱정 스럽습니다. 하지만,'$ apply()'를하는 것은 나를 위해 일해 버렸다. 정말 고마워! –