Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >CanActivate,动力学urls的解析器(多个嵌套动态段)

CanActivate,动力学urls的解析器(多个嵌套动态段)
EN

Stack Overflow用户
提问于 2017-01-17 12:19:33
回答 1查看 111关注 0票数 1

我构建了一个web应用程序,它在动态生成的页面中占了很大一部分。(99%)

每个页面只是一个带有空模板的组件,其中所有数据都是通过url的片段从提供的。

url可以包含三个嵌套级别,每个级别必须对应一个逻辑嵌套(从上下文的角度来看,我的意思是.友好的)。

例如,一个显示国家信息的应用程序:

  1. 区域- http://example.com/regions
  2. 县- http://example.com/regions/counties
  3. 城市- http://example.com/regions/counties/city

url使用的每个标签名都必须转换为一个有效的嵌入名:http://example.com/south-east/greater-london/london,就像俄罗斯娃娃一样。

路由器似乎是这样的:

代码语言:javascript
运行
AI代码解释
复制
{
    path: ':region-slug',
    component: RegionComponent,
    resolve: {
        region: RegionResolver
    }
},
{
    path: ':region-slug/:countie-slug',
    component: CountieComponent,
    resolve: {
        departement: CountieResolver
    }        
},
{
    path: ':region-slug/:countie-slug/:city-slug',
    component: CityComponent,
    resolve: {
        region: CityResolver
    }
}

第一个问题是,url可以是任何东西,它永远都是真的:

  1. http://example.com/titi =>真
  2. http://example.com/qsdsqd/azeaz =>真
  3. http://example.com/titi/aze/toto156 =>真
  4. ..。

因此,我必须控制每个param的有效性,以便删除模板的适当数据,或者如果服务创建任何内容,则重定向。

以下是我的第一个问题:

  1. 我必须使用解决还是CanActivate

我想这个工作最适合于解决接口。我开始用“解析器”为第一级(区域)实现它:

代码语言:javascript
运行
AI代码解释
复制
@Injectable()
export class RegionResolver implements Resolve<any>{

  constructor(private regionsService: RegionService, private router: Router) { }

  resolve(route: ActivatedRouteSnapshot): Observable<any> {

    return this.regionsService
      .getRegion(route.params['region-slug'])
      .do(region => { 
        if(!region) this.router.navigate(['/404']);
      });
  }
}

我在RegionController中得到了相应的数据:

代码语言:javascript
运行
AI代码解释
复制
export class RegionComponent implements OnInit {

  region: Array<any> = [];

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {

    this.region = this.route.snapshot.data['region'];
  }
}

现在很容易,但是任务开始更复杂,因为如果我将相同的行为应用于所有其他级别,这种urls在编程上是正确的:

  1. http://example.com/south-east =>真
  2. http://example.com/sdfsdfsdfsd/greater-london =>真
  3. http://example.com/qsdq/toto54645/london =>真
  4. ..。

所以,问题:

  1. 我如何确保即使当前评估的段塞是正确的,潜在的前一段段塞也是正确的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-18 13:59:46

据我所见,您就快到了:您的路由声明和解决方案似乎很好。

如果弹头无效,你为什么不直接从解析器中验证这些弹头并重定向到/404呢?

您可以创建这样的函数:

代码语言:javascript
运行
AI代码解释
复制
// validate-slugs.ts
/**
 * Return true if all given slugs are valid.
 */
export function are_slugs_valid(slugs: any): boolean {
  const validRegions = ['ile-de-france', 'nord-pas-de-calais'];
  const validCounties = ['val-de-marne', 'nord', 'pas-de-calais'];

  // Validate region slug
  if (slugs && slugs['region-slug'] && validRegions.indexOf(slugs['region-slug']) === -1) {
    return false;
  }

  // Validate county slug
  if (slugs && slugs['county-slug'] && validCounties.indexOf(slugs['county-slug']) === -1) {
    return false;
  }

  // @TODO: Validate city slug...

  return true;
}

然后在您的解析中使用它,如下所示:

代码语言:javascript
运行
AI代码解释
复制
@Injectable()
export class RegionResolver implements Resolve<any>{

  constructor(private router: Router) { }

  resolve(route: ActivatedRouteSnapshot): Observable<any> {
    // NB. route.params contains ALL the slugs in the current route.
    if (!are_slugs_valid(route.params)) {
      this.router.navigate(['/404']);
    }
    // Proceed with fetching additional data...
  }
}

如果验证弹格的代码需要更复杂(例如,发出HTTP请求),请将are_slugs_valid()函数转换为服务,并使用DI将其注入解决方案中。

我尝试了我建议的代码,并获得了以下行为:

如果你想看密码,请告诉我。

编辑几个附加注意事项:

1)由于您可能要访问一个数据库来验证这些弹头,所以您需要对其进行优化。为什么不将所有可能的路径存储在数据库中呢?

代码语言:javascript
运行
AI代码解释
复制
ile-de-france
ile-de-france/val-de-marne
ile-de-france/val-de-marne/creteil
...

这样,对于最深的路径(如ile-de-france/val-de-marne/creteil ),您只需要一个查询就可以验证路径中包含的三个段塞(:region-slug:county-slug:city-slug)。

2)如果将path列添加到实体(即区域、县、市.)所在的同一表中存储时,只需要一个查询就可以加载实体并验证路径(路径充当实体的键)。

附带注意:如果您遵循我上面的建议,将您的代码保持在一个解决方案中是有意义的,因为它预先加载了一些数据并进行了一些验证,这就是解析的目的。如果您只想在不预先加载数据的情况下验证路径,我可能会将代码放在CanActivate服务中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41706205

复制
相关文章
如何在生存分析与Cox回归中计算IDI,NRI指标
原文链接:http://tecdat.cn/?p=6095 读取样本数据 D=D\[!is.na(apply(D,1,mean)),\] ; dim(D) ## \[1\] 416 7 查询部分
拓端
2022/03/05
6890
如何在生存分析与Cox回归中计算IDI,NRI指标
R语言如何在生存分析与Cox回归中计算IDI,NRI指标
原文链接:http://tecdat.cn/?p=6095 读取样本数据 D=D[!is.na(apply(D,1,mean)),] ; dim(D) ## [1] 416 7 查询部分数据(结果
拓端
2020/07/16
2.3K0
模型评价指标—F1值
最近在参赛时也发现了一个问题,就是算法在训练集上完全拟合(KS=1),但是到测试集上衰退得比较多,即出现了过拟合的现象。
阿黎逸阳
2023/08/21
2.3K0
模型评价指标—F1值
如何在生存分析与Cox回归中计算IDI,NRI指标|附代码数据
本文摘选 《 R语言如何在生存分析与Cox回归中计算IDI,NRI指标 》 ,点击“阅读原文”获取全文完整资料。
拓端
2023/04/04
4360
如何在生存分析与Cox回归中计算IDI,NRI指标|附代码数据
本文摘选 《 R语言如何在生存分析与Cox回归中计算IDI,NRI指标 》 ,点击“阅读原文”获取全文完整资料。
拓端
2023/05/19
3460
分类模型评价指标_简述常用的模型评价的指标
混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。
全栈程序员站长
2022/11/10
9090
分类模型评价指标_简述常用的模型评价的指标
C-statistic的显著性检验
R语言临床预测模型系列,从入门到进阶,目前已更新20+篇优秀推文,所有数据和代码均可免费获取,持续更新中,欢迎订阅。
医学和生信笔记
2022/11/15
8670
限制性立方样条(RCS)的列线图怎么画?
关于临床预测模型的基础知识,小编之前已经写过非常详细的教程,包括了临床预测模型的定义、常用评价方法、列线图、ROC曲线、IDI、NRI、校准曲线、决策曲线等。
医学和生信笔记
2023/02/14
1.8K0
限制性立方样条(RCS)的列线图怎么画?
logistic回归与cox回归的区别
logistic回归与线性回归并成为两大回归。logistic回归解释起来直接就可以说,如具有某个危险因素,发病风险增加多少倍,听起来让人通俗易懂,线性回归相比之下其实际意义就弱了。
水煮麥楽雞
2022/11/20
2.4K0
临床模型如何评估?快学一下C统计量
在本节中,我们将详细介绍使用R来计算Logistic回归模型的C统计量。实际上,Logistic回归模型的受试者工作特征曲线(ROC)是基于预测的概率。ROC曲线下面积(AUC)等于C-统计量,所以IBM SPSS软件也可以计算C-统计量,在此不再赘述。
用户6317549
2020/06/04
9.1K1
R语言中COX模型构建
COX回归模型,又称“比例风险回归模型(proportionalhazards model,简称Cox模型)”,是由英国统计学家D.R.Cox(1972)年提出的一种半参数回归模型。该模型以生存结局和生存时间为应变量,可同时分析众多因素对生存期的影响,能分析带有截尾生存时间的资料,且不要求估计资料的生存分布类型。由于上述优良性质,该模型自问世以来,在医学随访研究中得到广泛的应用,是迄今生存分析中应用最多的多因素分析方法 [引自百度百科]。
一粒沙
2019/07/31
4.8K0
计算π的值
圆周率π是一个无理数,没有任何一个精确公式能够计算π值,π的计算只能采用近似算法。国际公认采用蒙特卡洛方法计算。蒙特卡洛(Monte Carlo)方法,又称随机抽样或统计试验方法。当所求解问题是某种事件出现的概率,或某随机变量期望值时,可以通过某种“试验”的方法求解。简单说,蒙特卡洛是利用随机试验求解问题的方法。 首先构造一个单位正方形 和 1/4圆。随机向单位正方形和圆结构抛洒大量点,对于每个点,可能在圆内或者圆外,当随机抛点数量达到一定程度,圆内点将构成圆的面积,全部抛点将构成矩形面积。圆内点数除以圆外
fem178
2018/04/08
2.2K0
计算π的值
图像检索评价指标:PR曲线的计算与绘制
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149718.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
5040
并行计算的评估指标
假设一个程序串行的执行时间为100s,在经过并行化后,在8核处理器上其运行的时间下降到20s,那么并行化获得的加速比为:100/2=5,而并行效率为:5/8=0.625。 一般而言,如果并行效率低于0.5就说明并行优化是失败的(这可能意味着双核的性能还比不上单核,当然如果你有几十个核,可能会认为并行效率为0.5以下也是成功的。),通常此时应当减少核心数目而非相反。一般并行效率在0.75以上就已经非常好了。
AI异构
2020/07/29
2.9K0
并行计算的评估指标
TCGA的Cox森林
Molcular Profile Cox Analysis 输入一个你想要的基因,比如RAC3,`Select Measure for plot可以设置OS,PFI,DSS和DFI`,然后点上方的搜索🔍,就可以看到出的图了 需要的结果 继续往下滚动鼠标,就可以看到数据了,而且还可以下载 数据在这 得到数据以后就可以用R画图了,注意,这里的HR和CI都是Log过的结果,跟别的地方计算的Cox结果有些不一样,可能是方法不一样吧,是因为网站计算的HR结果相差太大了吗? 由于是log过的结果,所以森林图
派大星在吗
2021/12/06
2790
分类模型的评价指标(三)
假设我现在有一个二分类任务,是分析100封邮件是否是垃圾邮件,其中不是垃圾邮件有65封,是垃圾邮件有35封.模型最终给邮件的结论只有两个:是垃圾邮件与 不是垃圾邮件.
用户5745385
2019/07/04
8902
分类模型的评价指标(三)
不同训练模型的比较
在上一篇文章结尾,我们提到了,与使用SGD(随机梯度下降)和冲量训练的模型相比,L-BFGS方法产生不同误差的解决方法。所以,有一个问题就是什么样的解决方法泛化能力最强,而且如果它们关注的方向不同,那么对于单个方法它们又是如何做到泛化能力不同的。 为了使分析更加容易,但至少保证符合实际,我们以“werewolf”为主题训练了一个线性SVM 分类器(W,bias)。换句话说,所有包含这一主题的电影都被标记为“+1”,而且我们随机的抽样“剩下的”电影,并将其标记为“-1”。至于特征,我们使用1500多个高频的关
用户1737318
2018/06/05
9460
评分法模型开发-WOE值计算
本文介绍了信用风险计量模型开发的一个关键步骤,即如何确定信用风险计量的指标体系和权重。作者详细解释了信用风险计量模型的开发过程,包括数据清洗、特征选择、模型训练和模型验证。在模型开发过程中,作者使用了多个定量和定性指标,并采用了基于逻辑回归的WOE编码来处理定性指标。最终,作者构建了一个信用风险计量模型,并提供了该模型的详细解释。
Erin
2018/01/09
1.5K0
评分法模型开发-WOE值计算
达观数据搜索引擎排序实践(下篇)
机器学习排序 机器学习排序(Machine Learning to rank, 简称MLR) 机器学习排序系统框架 机器学习排序系统一般分为离线学习系统和在线预测排序系统。离线系统的设计需要靠特征的选
达观数据
2018/03/30
1.4K0
达观数据搜索引擎排序实践(下篇)
Nat Commun&JAMA INTERN MED|浅析两篇LASSO+Logistic/Cox 套路文章
两篇文章分别是来自NATURE COMMUNICATIONS的Early triage of critically ill COVID-19 patients using deep learning(doi:10.1038/s41467-020-17280-8)和 JAMA Internal Medicine的Development and Validation of a Clinical Risk Score to Predict the Occurrence of Critical Illness in Hospitalized Patients With COVID-19( doi:10.1001/jamainternmed.2020.2033).
用户7010445
2021/07/12
9320
Nat Commun&JAMA INTERN MED|浅析两篇LASSO+Logistic/Cox 套路文章

相似问题

cox模型的MLR -重采样

10

MLR与randomForestSRC:计算机间的不一致性

10

含时间协变量Cox模型的c-统计量与95%置信区间

10

R与Stata的Cox比例风险模型

13

Cox模型的常数

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档