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
相关产品推荐
相关产品推荐

