我在ng-include
中有一个ng-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>
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
属性。
答案 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/