11

大量のデータを含む大きなフォームがあるため、タブごとにデータのチャンクを含むタブが必要です。

タブのタイトルをクリックしたときにタブのコンテンツを遅延読み込みしたいのですが、後で再度選択したときに再度リロードする必要はありません。

この例は、私が望む方向に進んでいると思います: angular-ui tabs loading template in tab-content

しかし、これは静的テンプレートをロードしているようです:

<tabs>
    <pane active="pane.active"
          heading="{{pane.title}}"
          ng-repeat="pane in panes">
        <div ng-include="pane.content"></div>
    </pane>
</tabs>

$http.get() を使用してペインのコンテンツを動的にロードするにはどうすればよいですか? 注: これは既に ng-view ルーティングを介して読み込まれたページであるため、ネストされたルーティングを行うことはできません。

編集:タブごとにコンテンツがかなり異なるため、理想的には、すべてのタブまたはそのようなものに関数とテンプレートを提供します...

angular-ui はこれを行う良い方法だと思いますか?

4

2 に答える 2

17

タブをajax経由でロードする方法に興味がありました。これが私が作った小さなデモです。

タブには、select選択時にトリガーされる属性があります。そこで、タブに次を使用しました。

<tab heading="{{tabs[0].title}}" select="getContent(0)">
       <div ng-hide="!tabs[0].isLoaded">
        <h1>Content 1</h1>
          <div ng-repeat="item in tabs[0].content">
            {{item}}
          </div>
      </div>
      <div  ng-hide="tabs[0].isLoaded"><h3>Loading...</h3></div>
   </tab>

コントローラ:

 $scope.tabs = [
    { title:"AJAX Tab 1", content:[] , isLoaded:false , active:true},
    {  title:"Another AJAX tab", content:[] , isLoaded:false }
  ];


  $scope.getContent=function(tabIndex){

    /* see if we have data already */
    if($scope.tabs[tabIndex].isLoaded){
      return
    }
    /* or make request for data , delayed to show Loading... vs cache */
    $timeout(function(){
        var jsonFile='data'+(tabIndex +1)+'.json'
        $http.get(jsonFile).then(function(res){
            $scope.tabs[tabIndex].content=res.data;
            $scope.tabs[tabIndex].isLoaded=true;
        });

    }, 2000)

  }

キャッシュをサービスに移動するため、ユーザーがビューを切り替えて戻った場合でも、データはサービス キャッシュに残ります。

DEMO

于 2013-11-05T04:37:40.453 に答える
6

別のアプローチは、 dynamic を使用することng-includeです。

<tabset>
    <tab ng-repeat="tab in tabs"
         heading="{{tab.heading}}"
         select="setTabContent(tab.content)">
    </tab>
</tabset>
<ng-include src="tabContentUrl"></ng-include>

次に、コントローラーには次のものがあります。

$scope.tabs = [
    { heading: 'Dashboard', content: 'dashboard' },
    { heading: 'All Nodes', content: 'nodes' },
    { heading: 'Details', content: 'details' },
    { heading: 'Dependencies', content: 'dependencies' }
];

$scope.setTabContent = function(name) {
    $scope.tabContentUrl = "view/" + name + "/index.html";
}
于 2015-06-12T16:28:14.093 に答える