Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 离子3防护问题_Angular_Typescript_Ionic Framework_Ionic3_Guard - Fatal编程技术网

Angular 离子3防护问题

Angular 离子3防护问题,angular,typescript,ionic-framework,ionic3,guard,Angular,Typescript,Ionic Framework,Ionic3,Guard,我意识到在ionViewCanEnter决定加载页面之前,用户甚至可以查看页面 因此,模板中的所有组件都会得到构造 在我看来,这可能会变得非常低效,尤其是当组件在其构造函数中使用http请求来加载数据时 我是做错了什么,还是有更好的防守方法 简单副本 test-page.html 测试组件 控制台 您所期望的是与Ionic中的页面/组件的设计不同的东西 ionViewCanEnter 在视图可以进入之前运行。这可以作为一种“保护” 在经过身份验证的视图中,您需要在 视图可以进入 你可以看到它说在

我意识到在ionViewCanEnter决定加载页面之前,用户甚至可以查看页面

因此,模板中的所有组件都会得到构造

在我看来,这可能会变得非常低效,尤其是当组件在其构造函数中使用http请求来加载数据时

我是做错了什么,还是有更好的防守方法

简单副本

test-page.html

测试组件

控制台


您所期望的是与
Ionic
中的
页面/组件的设计不同的东西

ionViewCanEnter

在视图可以进入之前运行。这可以作为一种“保护” 在经过身份验证的视图中,您需要在 视图可以进入


你可以看到它说
在视图进入之前运行
而不是在视图创建之前运行。如果页面的
视图
已经创建,则意味着
页面的
组件
也在
构造中。这是设计的。我们对此无能为力。但是您可以更改
组件的数据检索方式。换句话说,您需要根据
ionViewCanEnter()
的逻辑发出一条消息,然后,您可以
订阅
组件中的
事件
以进行数据检索。然后,您可以删除组件的
构造函数中的数据检索。希望此后一切正常。

您能展示一下
code
您是如何处理
ionViewCanEnter
的吗?我将返回一个承诺,从本机存储中获取令牌并使用(同步)验证它JWT helper函数:你能显示
代码吗?@Sampath我刚刚在post中添加了一个简单的版本,似乎你是对的,但是如果你问我,这种保护方法会导致性能泄漏:它构建整个页面,然后说“等等,你甚至不允许在这里!”。我希望爱奥尼亚团队将来能找到更好的解决方案,或者从某种程度上实现这一方法。无论如何,订阅活动是个好主意。我不同意你的观点。你只考虑
false
用例。这意味着,
等等,你甚至不被允许在这里。如果
true
用例如何?如果
为true
,您认为用户是否应该等到整个页面创建完毕?因此,无论哪种方式,我们都会有性能泄漏。因此,
Ionic/Angular
团队必须选择其中之一。他们在这里选择了
false
用例。我想这也一定是件好事。因为如果不构建
页面
,他们甚至不能考虑
ionViewCanEnter
生命周期挂钩。
<ion-content>
  <test></test>
</ion-content>
...
ionViewCanEnter() {
  console.log('ionViewCanEnter?');
  return false;
}
...
...
constructor() {
  console.log('TestComponent Constructed');
}
...
TestComponent Constructed
ionViewCanEnter?