2

我有一个ng-includeandng-controller在一个ng-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>

在 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。我只注意到这种情况是因为我看到 GET 失败views/.html

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

4

1 回答 1

1

该属性name不适用于 IE 上的功能。

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

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/

于 2013-01-27T01:25:02.963 回答