2016-06-22 10 views
0

特に$ filter( 'filter')関数の学習と、それにローカル関数をフィルタ関数として渡す方法に悩まされました。

API(jsonファイル)には、trips.json内のすべてのトリップと、user.trips.json内のすべてのトリップのID配列が含まれます。

データを取得取得工場では、次のようになります。コードの

app.factory("tripsApi", function ($http) { 
    return { 
    allTrips: $http.get('/api/trips.json') 
     .success(function (response) { 
     return response; 
     }) 
     .error(function (error) { 
     return error; 
     }), 
    userTrips: $http.get('api/user.trips.json') 
     .success(function (response) { 
     return response; 
     }) 
     .error(function (error) { 
     return error; 
     }) 
    } 
}); 

次の作品は、すべてのユーザーが情報をトリップ取得するためだけのサービスです。このサービスは、ファクトリを使用してAPIにアクセスします(この場合は、men jsonファイルのみ)。そして、トリップ情報をフィルタリングして、ユーザがid配列を使って取得したものだけを取得すべきです(SHOULD)。

app.service("trips", function (tripsApi, $filter) { 
    var self = this; 

    this.user = { 
    trips: Array() 
    }; 

    this.trips = Array(); 

    this.getUserTrips = function() { 
    self.getAllTrips.then(function() { 
     tripsApi.userTrips.success(function (response) { 

     self.user.trips = $filter('filter') 
     (self.trips, self.containsChild(id, response)); 

     }); 
    }); 
    }; 

    this.getAllTrips = tripsApi.allTrips.success(function (response) { 
    self.trips = response; 
    }); 

    this.containsChild = function (id, idsArray) { 
    if (id != 0 && idsArray != null) { 
     for (var i = 0; i < idsArray.length(); i++) { 
     if (idsArray[i] == i) 
      return true; 
     return false; 
     } 
    } 
    } 

}); 

しかし、私はそれを動作させることはできません。最初のエラーは、self.containsChild(id、response)で定義されていないIDです。

ここで間違いはありますか?助けを歓迎します:)

+0

ラムダ構文()=> {} ... tripsApi.userTrips.success((response)=> {})を使用します。 ...通常の機能の代わりに...これが役立つかどうかを確認する – Ajay

答えて

1

ID発行、呼び出しは次のようになります。

$filter('filter')(self.trips, self.containsChild); // this won’t really work, though, because your `containsChild` function is not properly defined. 

第二に、これは適切に定義されたサービスではありません。あなたは、次の

app.service('ServiceName', [ '$filter', function ($filter) { 
    var myInstance = {}; 
    myInstance.containsChild = function (value, index, array) { 
    }; 
    myInstance.user = . . .; 
    return myInstance; 
}]); 

第三のように見える何かをしたい、3つのパラメータを取るためにあなたのcontainsChild機能を修正します。最初のものは渡された値、2番目はインデックス、3番目はフィルタリングされる配列になります。

+0

あなたの構文を調べていただきありがとうございます。 – MattJ

1

私はそれを働かせることはできません。私が取得する最初のエラーは、idは間違いがあるself.containsChild(id, response);

を定義されていない のですか?

あなたはどこにでもあなたがエラーの原因となっているものであるが設けられたコードで宣言された変数idはありません関数にidを渡されたが。

また、私はあなたのコードには一貫性がないことを観察してきた、あなたはselfthisが割り当てられていますが、あなたのコード内でどこでもthisselfを使用してください。