저는 기존 SPA에서 Aurelia 구성 요소를 단계별로 교체하는 작업을하고 있습니다. TemplatingEngine
의 enhance
API를 사용합니다. 잘 작동하지만 응용 프로그램의 다른 부분 (페이지 새로 고침 없음)으로 이동할 때 이러한 향상된 단편을 제거해야합니다 (이벤트 리스너 제거 ...).개선 된 프래그먼트를 제거하는 방법
제 아이디어는 페이지에 aurelia 인스턴스를 유지하고 다시 사용하는 것입니다.
현재이 같은 단편을 향상 :
function enhanceFragment(targetElement) {
function proceed() {
let aurelia = window.DFAurelia;
let engine = aurelia.container.get(TemplatingEngine);
engine.enhance({
container: aurelia.container,
element: targetElement,
resources: aurelia.resources
});
}
if (!window.DFAurelia) {
bootstrap(async aurelia => {
aurelia.use
.defaultBindingLanguage()
.defaultResources()
.eventAggregator()
.developmentLogging()
.globalResources('app/df-element');
await aurelia.start();
window.DFAurelia = aurelia;
proceed();
});
} else {
proceed();
}
}
I 모습 향상되는 HTML : I가 맞춤 요소 자체의 기능이 시도
<df-element></df-element>
(DfElement::removeMyself()
를)
let vs: ViewSlot = this.container.get(ViewSlot);
let view: View = this.container.get(View);
vs.remove(view);
vs.detached();
vs.unbind();
컨테이너에서보기를 가져 오는 중에 오류가 발생합니다 (정의되지 않은 'resources'속성을 읽을 수 없습니다.). 클릭 핸들러에서이 함수를 호출했습니다.
홈페이지 질문 : 수동으로 DfElement
및 그 아이의 unbind
및 detached
훅을 유발하는?
보너스 : 내 aurelia
인스턴스의 인스턴스 (window.DFAurelia
) root
및 host
은 정의되지 않았습니다. 나쁜 것입니까? 이 페이지의 조각을 향상시키는 (그리고 강화하지 않는) 방법에 잠재적 인 문제점이 있습니까?
이 요소에 ''을 사용하지 않으므로 두 번째 옵션이 유용합니다. 감사! –
'this.view = null;'을'removeMyself'의 마지막 줄로 사용하는 것이 중요합니까? –
가비지 컬렉터에게? –