0

サービスからスクロールでデータを取得している状況があります。今、人気のあるデータと最新の投稿を使用してデータをフィルタリングする必要があります

これが私のサービスです:

App.factory('Serviec', function ($http, $rootScope) {
    var Hututoo = function () {
        this.items = [];
        this.busy = false;
        this.after = 'Serviec_0';
    };

    Serviec.prototype.nextPage = function () {
        if (this.busy) return;
        this.busy = true;
        // return undefined  
        console.log($rootScope.listtype);
        $http.get(baseurl + 'ajax/gethome?after=' + this.after).success(function (data)               {
            var items = data;
            for (var i = 0; i < 5; i++) {
                this.items.push(items[i]);
                // debugger;
            }
            this.after = "Hututoo_" + this.items.length;
            this.busy = false;
        }.bind(this));
    };
    return Serviec;
});

コントローラーで:

$scope.data= new Serviec();

$scope.listtype= 'latest';
$scope.changelist = function(str){    
       $rootScope.listtype = str;   
   $scope.data.items=[];            
   $scope.data.after = 'Serviec_0';           
         $http.post(baseurl+"ajax/gethome","after="+$scope.hututoo.after+"&list="+str).success(function(data){
            $scope.data.items = data;
           }); 
}

HTML

<li ng-click="expression = 'latest';changelist('latest');" ng-class="{latest_icon:expression == 'latest'}">Latest Hoot</li>
<li ng-click="expression = 'popular';changelist('popular');" ng-class="{popular_icon:expression == 'popular'}">Popular Hoots</li>

したがって、これらのクリックでデータを注文する必要があります。ユーザーのクリックに応じてデータを取得するには、http 呼び出しを行う必要があります。

リストタイプを定義するスコープデータを作成し、ファクトリーで取得できると考えていました。

このスコープをServiec Factoryに挿入するにはどうすればよいですか。rootscopeを使ってみました。最初は list type が latest に設定されていますが、undefined と表示されます。では、これを達成する最良の方法は何でしょうか?

更新

これで、Angular サービスのスコープ データにアクセスできるようになりましたが、小さな問題が発生します。リストをクリックすると、スコープ内の前のアイテムが空にならず、新しいアイテムがスコープにプッシュされます。

したがって、需要はリストをクリックして以前のデータがゼロになり、新しいデータがスコープにプッシュされます。

4

3 に答える 3

1

使用しないでください$rootScope。純粋な JS で head オブジェクトを使用するのと同じように、悪い習慣です。listtypeすでにファクトリとコントローラの間でデータを共有できるので、ファクトリのプロパティを作成してみませんか?

var Hututoo = function () {
    ...
    this.listtype = 'latest';
};

他のプロパティと同じように、コントローラーで使用します。

$scope.changelist = function(str){    
    $scope.hututoo.listtype = str;
    ...
};

デモ<-- 明らかな理由で ajax リクエストが機能しない

于 2014-05-29T16:56:16.757 に答える