为什么 angularjs 插值在 IE 11 中失败?

Why does angularjs interpolation fail in IE 11?

我有一个简单的指令,可以从一组工具对象创建工具栏

<div ng-repeat="tool in tb.tools">
    <button id="{{tool.name}}" class="btn" 
            aa-tool-button="tb.state.selectedTool"
            ng-click="tb.toggleSelected(tool)"
            style="background-color:{{tool.color}}">
        {{tool.caption}}
    </button>
</div>

在 Chrome 中,Firefox、Safari 和 Edge 可以正常工作。但是按钮颜色没有在 IE 11 中进行插值。由于某种原因插值失败。这是在 IE 元素检查器中显示的内容:

导致空样式标签和默认灰色按钮。

任何人都可以为此提出合理的解决方法吗?

这看起来很丑,更好用:

ng-style="{'background-color': tool.color}"

工作正常

简而言之,完全避免使用“{{value}}”语法。

Interpolation/Transclusion,一般来说,似乎不适用于 Internet Explorer 10 和 11,至少在 Angular 版本 1.5.5 中是这样。它可能已在后续版本中修复。

解决方法是使用 ng 属性而不是使用插值,以及 ng-bind(如果需要也创建一个 span 来绑定)用于通用文本注入。无论如何,这些可能是最佳实践。

经过调试,根本原因似乎是最终使用 j-query 来设置节点的文本值,这在大多数浏览器中都可以正常工作,因为文本节点要么隐式存在,要么自动创建, 但这些版本的 IE 需要首先显式创建文本节点。更新版本的 j-query 可能会解决这个问题(我们使用的是 2.2)。

可在此处找到更多信息:

https://github.com/angular-ui/ui-router/issues/615 https://github.com/angular/angular.js/issues/5025