使用两个文件json创建一个Angularjs过滤器

时间:2014-12-16 21:45:19

标签: javascript json angularjs html5

我是棱角分明的新手,我遇到过滤器问题。 我有两个不同的文件json:

    [
        {
            "IdPers": "1067",
            "CognNome": "JANE SMITH",
            "Sex": "F"

        },
        {
            "IdPers": "1093",
            "CognNome": "JOHN SMITH",
            "Sex": "M"

        }

        ]

和:           [

        {
            "IdPers": "1067",
            "DescRuol": "Membro"
        },
        {
            "IdPers": "163",
            "DescRuol": "Membro"
        }
        ]

我把一个有效的Plunker:http://plnkr.co/edit/1xkyxRallRGtj83fSteg?p=preview

我必须创建一个带有“DescRuol”字段的过滤器,该字段位于文件“OutCommissioni.json”中,这两个文件具有相同的字段“id”。我以为我可以像加入一样做但我不能做出有用的东西!谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

编辑:忽略这个答案 - 我误解了这个问题。在我在这个答案的评论中找出OP真正想要的内容后,提交了最新详细信息的新答案。

从每个文件中获取数据后,通过将相关的不同字段分配给公共属性来规范化属性的差异,并将两组数据附加到单个数组中。

var App = angular.module('App', []);
App.controller("OutAnCtrl", function ($http, $scope) {

    $scope.data = [];

    $http.get('OutAnagrafica.json')
        .success(function (data) {
            data.forEach(function(item) {
              item.name = item.CognNome;
            });
            $scope.data.push.apply($scope.data, data);
        });

     $http.get('OutCommissioni.json')
        .success(function (data) {
          data.forEach(function(item) {
            item.name = item.DescRuol;
          });
          $scope.data.push.apply($scope.data, data);
        });

    $scope.clearBox = function () {
        $scope.filter = "";
    };

});

然后最后更改转发器以使用合并的数据对象“data”和公共属性名称。

<tr data-ng-repeat="Person in data|filter:filter">
  <td>{{Person.IdPers}}</td>
  <td>{{Person.name}}</td>
  <td>{{Person.Sex}}</td>
</tr>

更新示例:http://plnkr.co/edit/03rwNY7eLX9i9VCTHz7Z?p=preview

编辑:我可能误解了,你可能不需要合并这些属性。关键部分是使用Array.push.apply将两个数组附加到单个数组

// Create initial array
$scope.data = [];

// Append some arrays
$scope.data.push.apply($scope.data, [1,2,3]);
$scope.data.push.apply($scope.data, [4,5,6]);

// $scope.data will now contain [1,2,3,4,5,6]

编辑:我认为这就是你要找的东西? http://plnkr.co/edit/jvyXlpv2iBh2n4pZ1miv?p=preview

<label for="DescRuol">DescRuol:</label>
<select data-ng-options="item.IdPers as item.DescRuol for item in OutCommissioni" id="DescRuol" data-ng-model="filter.IdPers" class="form-control input-sm"></select>

答案 1 :(得分:0)

对于未来的读者,请忽略我的其他答案 - 我误解了这个问题,并在那里的评论中与OP一起制定了细节。

要使用相同值的多个选项的选择框,首先不要使用id作为选择框将使用的直接值 - 而是直接引用该对象:

<select data-ng-options="item as item.DescRuol for item in OutCommissioni" id="DescRuol" data-ng-model="filter.IdPers" class="form-control input-sm"></select>

&#34; item as item.DescRuol&#34;将使用对象本身作为模型值,而不仅仅是id值。

接下来,而不是使用&#34; filter&#34;对象直接在过滤器中提供一个新对象,其中包含过滤器对象所需的值:

<tr data-ng-repeat="Person in OutAnagrafica|filter:{Sex:filter.Sex,IdPers:filter.IdPers.IdPers}">

这里的工作示例:http://plnkr.co/edit/gMvuNny99b8aV66C8GAw?p=preview