javascript - IE9 忽略 Angular 对象(在 ngRepeat 中)

标签 javascript html internet-explorer-9 angularjs

我在 ng-repeat 中有一个 ng-includeng-controller,当 IE 看​​到重复的子实例对象:

在 main.html 中

<section ng-repeat="panel in sidepanels">
  <h2 class="twelve columns">
    <span class="twelve">
      <i class="icon {{panel.icon}}"></i> <!-- resolves properly -->
      {{panel.controller.name}} <!-- empty -->
    </span>
  </h2>
  <div
    ng-include src="'views/'+panel.controller.name.toLowerCase()+'.html'"
    ng-controller="panel.controller"
  ></div>
</section>

controllers.js 内部

function Main($scope) {
  …
  $scope.sidepanels = [
    {
      "controller": Alerts,
      "icon": "icon-warning-sign"
    }
  ];
  …
}

function Alerts($scope,WebSocket) {
  $scope.alerts = [];
  WebSocket.on('…', function(data) { … });
  WebSocket… //WebSocket is a Service
}

除了没有在控制台中抛出错误外,它只是默默地忽略了有时无法解析 panel 的事实。我只注意到是这种情况,因为我在 views/.html 上看到失败的 GET。

我检查了MSDN ,并且据说 IE 支持 name 属性。

最佳答案

属性 name 不能很好地用于 IE 上的函数。

您可以使用以下代码片段来检索函数的名称(如 here 所述):

func.toString().match(/^function ([^(\s]+)/)[1]

向创建模板路径的 Main Controller 添加一个函数,如下所示:

$scope.getTemplatePath= function(controller) {
    return 'views/' + angular.lowercase(controller.toString().match(/^function ([^(\s]+)/)[1] + '.html');    
};

在 HTML 上:

<div ng-include="getTemplatePath(panel.controller)" ng-controller="panel.controller"></div>

jsFiddle:http://jsfiddle.net/bmleite/faGRk/

关于javascript - IE9 忽略 Angular 对象(在 ngRepeat 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14449244/

相关文章:

javascript - 如何改变页面嵌入声音的音高?

javascript - JS调试流程?

javascript - 浏览器中用于忽略路径的 bash 命令的代码块

javascript - 如何以编程方式 ng-bind svg 元素上的属性?

javascript - 单元格表上的多个倒计时器

html - overflow hidden 的div中的中心图像

javascript - [必填] 字段不适用于下拉框的解决方法

html - IE7 IE8 IE9 颜色 :transparent property

javascript - 文本节点上 "nodeValue"属性的类型 == IE9 中的 "unknown"

internet-explorer - 如何在IE开发人员工具中以交互方式删除选定的HTML元素?