2016-04-20 10 views
1

AngularJSのオブジェクト配列に対してslice()メソッドを使用しようとしていますが、そのスライスはメソッドではありません。ここでangularJSのslice()メソッドpnオブジェクト配列の使い方

は私がサービスを使用して$scope.faqDataでJSONファイルからデータを取得していますし、それが働いているコード

.controller('AppCtrl', function ($scope, Faq) { 

    $scope.filteredFaqData = []; 
    $scope.currentPage = 1; 
    $scope.numPerPage = 5; 
    $scope.maxSize = 3; 
    $scope.faqData = {}; 
    Faq.get().then(function (msg) { 
     $scope.faqData = msg.data; 

    }); 
    $scope.$watch('currentPage + numPerPage', function() { 
     var begin = (($scope.currentPage - 1) * $scope.numPerPage) 
     , end = begin + $scope.numPerPage; 

     $scope.filteredFaqData = $scope.faqData.slice(begin, end); 
    }); 

}); 

です。

しかし、スライスメソッドがエラーを返すコンソールで動作していません"$ scope.faqData.slice"はメソッドではありません。

+5

「faqData」はオブジェクトです。 '$ scope.faqData = {};'。あなたのサービスがそれに変異を起こさない限り。 [スライス](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)は、配列で使用できるメソッドです。 (技術的には、配列は数値プロパティキーと 'length'との特別な関係を持つオブジェクトですが、私の得点を得ます) – ste2425

+1

@ ste2425私のサービスはそれを変更しています。ここで '.factory( 'Faq'、function($ http){ return { get:function(){ console.log("関数内 "); return $ http.get( '/ Json/faq.json '); } }; }) '。サービスはオブジェクトの配列を返しています – Shahzad

+1

あなたの約束がウォッチャーが発生するまでに解決しましたか?おそらく 'faqData'変数を、それと一緒に使うつもりの型にデフォルトするべきでしょう。約束が解決される前に時計が起動された場合、その時点でオブジェクトが突然変更されていないので、 '.slice'を呼び出すことになります。 – ste2425

答えて

2

.sliceは、アレイ試作品から入手可能な方法です。

faqDataはプレーンな「olオブジェクト」として定義されています。したがって、.sliceへのアクセス権はありません。

あなたのサービスはfaqDataに変更されていますが、.sliceにアクセスできますが、これは解決されたときのみです。


だから、問題はあなたの約束は、あなたが、プレーンなオブジェクトからsliceを呼び出そうと意味解決する前に、あなたのウォッチャーが起動可能です。

オブジェクトを使用するタイプに定義し、可能であればオブジェクトを変更しないでください。

あなたの時計は、あなたの約束がまだ解決されていないという事実を処理する必要があります。これはウォッチャーで何をするつもりかによって決まります。

slice docs

関連する問題