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

AngularJS:如何阻止额外代码被执行

解决方法:用ng-if替代ng-show

这个问题我之前也碰到过!核心原因是**ng-show和ng-if的本质区别**:ng-show只是通过CSS隐藏DOM元素,但元素本身在页面加载时就已经被服务器端渲染出来了;而ng-if会在条件不满足时完全移除对应的DOM节点,只有当条件为真时才会触发渲染。

回到你的场景:服务器端渲染页面时,根本不会管Angular的ng-show条件,会直接执行@Html.Partial("ImageSelector"),导致ImageSelector的控制器提前运行,可此时currentItDraftHeader还没初始化,自然就抛出错误了。

所以只需要把ng-show换成ng-if,再加上currentItDraftHeader的存在判断(避免空指针),就能解决问题:

<uib-tab ng-if="currentItDraftHeader && currentItDraftHeader.treeType===2">
  <uib-tab-heading>
    <i class="fa fa-picture-o" uib-tooltip="@Labels.images" tooltip-placement="bottom"></i>
  </uib-tab-heading>
  @Html.Partial("ImageSelector")
</uib-tab>

这样一来,只有当currentItDraftHeader存在且treeType等于2时,ImageSelector的Partial才会被渲染,它的控制器代码也只会在这个时机执行,完美避开初始化阶段的错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:34:10