AngularJS v1.6.10中SVG模板image标签不显示问题求助
我之前碰到过类似的AngularJS 1.x里ngIf结合方法调用不生效的情况,给你几个实用的排查和解决方向:
先确认
getType()的返回值类型
AngularJS里的===是严格相等判断,如果你的getType()方法返回的是字符串"2"而不是数字2,那ctrl.getType()===2的条件就永远不成立。可以在模板里临时加个调试输出,看看实际返回值和类型:<image id="{{ctrl.id}}" xlink:href="{{ctrl.imageSource}}" animation-size-item item-width="ctrl.width" item-height="ctrl.height" ng-if="ctrl.getType()===2"> </image> <!-- 临时调试:显示返回值和类型 --> <span style="display:block;">返回值:{{ctrl.getType()}},类型:{{typeof ctrl.getType()}}</span>如果发现是字符串类型,要么把条件改成
ctrl.getType() === "2",要么修改getType()方法让它返回数字类型。检查
ctrl对象的有效性和方法上下文
在ng-repeat循环里,要确保ctrl确实是你预期的对象实例,getType()方法能正确调用。可以在控制器里打印ctrl的内容,或者在模板里用{{ctrl | json}}查看完整的对象结构,确认getType()方法存在且没有上下文绑定问题。另外,建议给ngIf加个前置判断,避免ctrl未初始化时调用方法报错:ng-if="ctrl && ctrl.getType()===2"排查自定义指令的干扰
你用到了自定义指令animation-size-item,有时候指令的编译或链接逻辑可能会影响ngIf的渲染。可以先临时移除这个指令,看看图片能不能正常显示。如果移除后正常了,再去检查指令的代码,看看有没有阻止DOM渲染的逻辑。清理模板缓存
因为你用了<script type="text/ng-template">定义模板,浏览器可能会缓存旧的模板内容,导致修改不生效。可以尝试强制刷新页面(Ctrl+F5)或者清除浏览器缓存后再测试。
内容的提问来源于stack exchange,提问作者袗薪褌芯薪 袗胁褉邪屑褔褍泻

