2017-11-06 8 views
1

ionViewCanEnter가 결정되기 전에 페이지가로드된다는 사실을 깨달았습니다. 사용자가 페이지를 볼 수있게되었습니다.Ionics 3 Guard issue

따라서 템플릿의 모든 구성 요소는 항상 생성됩니다.

IMO, 특히 구성 요소가 해당 구성 자에서 HTTP 요청을 사용하여 데이터를로드하는 경우 이는 실제로 비효율적 일 수 있습니다.

내가 뭔가 잘못되었거나 더 나은 Guard 접근 방법이 있습니까?

단순 복제

시험 page.html

<ion-content> 
    <test></test> 
</ion-content> 

시험 page.ts

... 
ionViewCanEnter() { 
    console.log('ionViewCanEnter?'); 
    return false; 
} 
... 

시험 component.ts

... 
constructor() { 
    console.log('TestComponent Constructed'); 
} 
... 

콘솔 당신은 IonicPage/Component의 디자인에있다 다른 무언가를 기대하고

TestComponent Constructed 
ionViewCanEnter? 
+0

'ionViewCanEnter'를 어떻게 처리했는지'code'를 표시 할 수 있습니까? – Sampath

+0

Native Storage에서 토큰을 받고 (동기식) JWT 도우미 함수로 유효성을 검사하는 약속을 반환합니다. –

+0

'code'를 표시 할 수 있습니까? – Sampath

답변

1

.

ionViewCanEnter

실행 뷰가 입력 할 수 있습니다 전에. 이것은 당신이 runs before the view can enter을 말한다 볼 수 있습니다

를 입력 할 수 있습니다 당신이 보기하려면 먼저 사용 권한을 확인해야 인증 뷰에서 "가드"의 일종으로 사용할 수 있습니다. 보기가 생성되기 전에이 아닙니다. Page의 view이 생성 된 경우 componentspage이고 constructed 인 것입니다. 이것은 의도적으로 설계된 것입니다. 우리는 아무 것도 할 수 없습니다. 그러나 귀하는 component의 데이터 검색 방법을 변경할 수 있습니다. 즉, ionViewCanEnter()의 논리에 따라 Event을 내야하고 그 후에는 component에 에서 event까지 데이터 검색을 할 수 있습니다. 그러면 구성 요소의 constructor에서 데이터 검색을 제거 할 수 있습니다. 그 후 모든 것이 잘 작동하길 바랍니다.

+0

당신이 옳은 것처럼 보였지만, 저에게 묻는다면,이 가드 접근법은 성능의 누출을 초래합니다. 전체 페이지를 구성한 다음 ' 너는 여기있을 수 없다. ' 이온 팀이 앞으로 더 나은 솔루션을 찾거나 Angular 자체의 접근 방식을 어떻게 든 활용할 수 있기를 바랍니다. 어쨌든, 이벤트 구독에 좋은 아이디어. –

+0

여기에 동의하지 않습니다.'거짓 '유스 케이스에 대해서만 생각하고 있습니다. 그건 '잠깐만, 너도 여기에있을 수 없다는거야!'. '진정한'유스 케이스라면? 'true'인 경우 전체 페이지가 만들어 질 때까지 기다려야한다고 생각하십니까? 그래서 우리는 어느쪽으로 든 성능 누출을 일으킬 것입니다. 그래서 '이오니아/각도'팀은 그 중 하나를 선택해야합니다. 그들은 여기서'거짓 '유스 케이스를 선택했습니다. 그리고 나는 그것도 꼭해야한다고 생각합니다. 왜냐하면'page'를 만들지 않고'ionViewCanEnter' 라이프 사이클 훅을 생각조차 할 수 없기 때문입니다. – Sampath