我在 ng-repeat
中有一个 ng-include
和 ng-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/