0

Angular で 2 つのコレクションを定義しました。

app.controller('MainCtrl', function($scope, PieceService, TeamService) {
  PieceService.query(function(data){
    $scope.pieces = data;
  });
  TeamService.query(function(data){
    $scope.teams = data;
  });
});

pieces は次のようなコレクションです: [{name:'Petra',team_id:2},{name:'Jan',team_id:3}] team は次のようなコレクションです:[{name:'TeamA',id:2},{name:'Team',id:3}]

テンプレートでは、pieces コレクションを繰り返し処理しています。

<tr data-ng-repeat="piece in pieces">

各作品のチーム名を印刷するにはどうすればよいですか?

これを行うフィルターを作成しようとしましたが、フィルターでスコープにアクセスする方法がわからないため、これまでのところ運がありません。

4

2 に答える 2

1

これが最もセクシーな方法かどうかはわかりませんが、コントローラー内にルックアップを行う関数を作成します。また、team_id を名前ルックアップにキャッシュすることにしましたが、2x2 検索にはそれほど必要ではないことに気付きました。

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
    $scope.pieces = [{name:'Petra',team_id:2},{name:'Jan',team_id:3}];
    $scope.teams = [{name:'TeamA',id:2},{name:'TeamB',id:3}];

    var idcache = {};

    $scope.getTeam = function(id) {
      if(idcache[id]) {
        return idcache[id];
      } 

      //cache this
      $scope.teams.forEach(function(team) {
        idcache[team.id] = team.name;
      });

      return idcache[id];

    }        
});

サンプルコードで plunkr を作成しました。 http://plnkr.co/edit/DsafIfMfARurNeVcl9Qd?p=preview

于 2013-06-02T22:40:05.827 に答える
1

次のように、チーム ID をオブジェクト キーとして使用します。

$scope.teamLookup = {}

// do this in the query callback
angular.forEach($scope.teams, function(val, key){
    $scope.teamLookup[val.id] = val.name
});

次に、マークアップは次のようになります。

<tr data-ng-repeat="piece in pieces">
    <td>{{teamLookup[piece.team_id]}}</td>
    <td>{{piece.name}}</td>
</tr>
于 2013-06-02T22:58:09.737 に答える