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

AngularJS 1.7.x中ngShow与UI-Router StickyStates兼容问题求助

解决AngularJS UI-Router Sticky States中ng-show不生效的问题

我一眼就揪出了问题的核心——你的inState函数没有返回值!这就是为什么哪怕$state.includes判断为true,ng-hide类也一直不会被移除的原因。

问题拆解

  • ng-show完全依赖表达式的返回值来决定是否添加/移除ng-hide类
  • 你的函数里只执行了console.log和$state.includes(state)这两步,但没有把$state.includes的判断结果返回给ng-show
  • 在AngularJS里,没有返回值的函数会默认返回undefined,而undefined会被当作false处理,所以ng-hide类始终不会被移除

修复方案

只需要在函数最后加上return关键字,把$state.includes的结果返回即可:

vm.inState = (state)=>{ 
  const isInState = $state.includes(state);
  console.log("checking " + state +": "+ isInState); 
  return isInState; // 关键:把判断结果返回给ng-show
};

额外调试与优化建议

  • 可以在模板里临时添加{{ac.inState('view1')}},实时查看函数返回值,确认是否正确返回true/false
  • 检查Sticky States的配置是否正确,确保父状态和子状态的sticky属性设置符合预期,避免状态判断逻辑本身出错
  • 确认$state服务已经正确注入到你的控制器中,没有注入缺失的问题
  • 如果需要精确匹配当前状态(而非包含父状态),可以改用$state.is(state),根据业务需求选择合适的判断方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:14:03