2

私はとを持っています、ng-includeそしてIEはリピートの子インスタンスオブジェクトを見るとランダムに自分自身をクラップスします:ng-controllerng-repeat

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 に答える