You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS 1.6 UI Router多过渡钩子多路由匹配问题

解决AngularJS 1.6中多路由匹配过渡钩子的问题

嘿,你碰到的这个问题其实是因为JavaScript对象里不能有重复的属性键——你写了两个from,后面的会直接覆盖前面的,所以肯定会出错啦。下面给你两种靠谱的实现方式:

方式一:使用数组指定多个路由匹配模式

AngularJS UI Router的$transitions钩子支持用数组来传递多个匹配规则,直接把你需要的路由模式放进from数组里就行:

$transitions.onBefore({ from: ['liste.**', 'demand.**'] }, function(transition) {
  // 这里写你要执行的代码,只会在离开liste或demand开头的路由时触发
  console.log('离开liste或demand相关路由啦');
});

这种方式最直接,适合你这种明确知道要匹配哪些路由模式的场景。

方式二:使用自定义匹配函数(更灵活)

如果你的匹配规则比较复杂,或者需要动态判断,还可以用一个函数来做匹配逻辑。我们可以给钩子传一个空的匹配对象,然后在回调函数里手动检查当前离开的路由是否符合条件:

$transitions.onBefore({}, function(transition) {
  const fromState = transition.from();
  // 用正则判断路由名称是否以liste.或demand.开头
  const shouldRunHook = /^(liste|demand)\./.test(fromState.name);
  
  if (shouldRunHook) {
    // 执行你的过渡逻辑
    console.log('符合条件的路由切换,执行钩子');
  }
  
  // 返回true/false可以控制是否允许过渡,根据你的需求调整
  return true;
});

这种方式适合需要更复杂判断的场景,比如还要结合路由参数或者其他状态来决定是否触发钩子。

另外要提醒下,**是UI Router的通配符,会匹配该路由下的所有子路由,比如liste.**会匹配liste、liste.detail、liste.item.edit这些路由,刚好符合你的需求~

内容的提问来源于stack exchange,提问作者galiolio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:59:06