2017-06-06 5 views
0

HTML:ng-repeatで可変変数名を正しく使用するにはどうしたらいいですか?

<ul> 
    <li ng-repeat="comic in comiclist"> 
    <span>{{ comic.title }} : {{comic.id}}</span> 
    <div > 
     <img ng-src="{{comic.thumbnail.path}}.{{comic.thumbnail.extension}}"/> 
    </div>   
    <div> 
     <ul> 
     <li ng-repeat="character in charlist + {{comic.id}}">  
      <span>{{character.name}}</span> 
     </li> 
     </ul> 
    </div> 
    </li> 
</ul> 

JS角度

var App = angular.module('MarvelApp', []); 
    App.controller('MainController', function($scope,$window, $http) { 
     $scope.GetSeries = function(){ 
     $http.get('http://gateway.marvel.com/v1/public/series?') 
     .then(function(response){ 
     $scope.serieslist = response.data.data.results; 
     }); 
     }; 
    $scope.GetComics = function(){ 
     $http.get('http://gateway.marvel.com/v1/public/series/' + $scope.selectedseries + '/comics?') 
     .then(function(response){ 
      $scope.comiclist = response.data.data.results; 
     }); 
     //comic in comiclist contains comic.id 
     //which needs to go to GetCharacter() 
    } 
    $scope.GetCharacter = function(comicid){ 
     $http.get('http://gateway.marvel.com/v1/public/comics/' + comicid + '/characters') 
     .then(function(response){ 
      $scope.['charlist' + comicid] = response.data.data.results; 
     //this list needs to be displayed in the second ng-repeat 
     }); 
    }; 
    }); 

と私は右のdivに表示する文字のリストを取得したいのですが。どのように前にセットアップしたのですか($scope.['charlist' + comicid]なし)、それは他のngリピートもオーバーライドしていました。

また、GetComics()が呼び出されると自動的にそれを行います。

答えて

1

私は$scope.[]が有効な構文であるとは思わない(ただし、気の利いたトリックを逃していない限り)。

代わり$scope下のようなもの "連想配列" という名前を付けなければならない:

<li ng-repeat="character in charlist[comic.id]"> 

コメントで述べたようにEDIT$scope.charlist:あなたのng-repeatは、その後のようになります

$scope.charlist[comicid] = ... ; 

を上記の行を使用する前に定義する必要があります。これは、いくつかの方法で発生する可能性があります:あなたはそれを設定する前に

  1. チェックを行います。if(!$scope.charlist) $scope.charlist = [];

  2. は、任意の数があります。もちろん、$scope.charlist = [];

とコントローラのどこかを定義しますあなたはこれを行うことができる方法ですが、これらは私が最も意義のあるものと信じさせるものです。その最初のものは無効な状態をキャッチします。つまり、何らかの理由で$scope.charlistnullに設定されていると、アレイ"。

+0

"angle.js:13920 TypeError:未定義の '60151'プロパティを設定できません" これは私が今$ scope.charlistに取得したエラーです。[comicid] = ...; 60151は漫画である – KevHau

+1

技術的には、JavaScriptには連想配列がありません。インスタンス化が必要な(配列)オブジェクトと考えることができます。 "$ scope.charlist = [];"という行を追加します。あなたのコントローラの上部にあります。その後、$ scope.charlist [comicid] = ....への参照がうまくいくはずです。 – Paurian

+0

が動作します:)ありがとう! – KevHau

関連する問題