IE9忽略角度对象(在ngRepeat内)

时间:2013-01-21 23:46:18

标签: javascript html internet-explorer-9 angularjs

我在ng-include中有一个ng-controllerng-repeat,并且当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>

inside 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属性。

1 个答案:

答案 0 :(得分:1)

属性name对IE上的函数效果不佳。

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

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

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

$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/