我遇到的情况是我从服务中获取滚动数据。现在我需要使用流行数据和最新帖子
来过滤数据这是我的服务:
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中注入此范围。我用rootcope试过了。 initally list type设置为latest,但显示undefined。那么最好的方法是什么呢?
更新:
现在我可以在角度服务中访问范围数据,但是这里出现的小问题是列表单击上一个项目的范围不会变空,新项目会被推入范围。
因此需求在列表中单击以前的数据变为零并且新的数据被推入范围。
答案 0 :(得分:1)
将$rootScope
传递给控制器并根据需要设置列表类型。
App.controller('MainCtrl', function($scope, $rootScope, Hututoo) {
$scope.hututoo = new Hututoo();
$scope.listtype= 'latest';
$scope.changelist = function(str){
$rootScope.listtype= str;
$scope.hututoo = new Hututoo();
$scope.hututoo.nextPage();
}
});
答案 1 :(得分:1)
避免使用$rootScope
- 这是不好的做法,就像在纯JS中使用head对象一样。您已经能够在工厂和控制器之间共享数据,那么为什么不将listtype
作为工厂的属性:
var Hututoo = function () {
...
this.listtype = 'latest';
};
并在您的控制器中使用它,因为您是其他属性:
$scope.changelist = function(str){
$scope.hututoo.listtype = str;
...
};
Demo&lt; - ajax请求因显而易见的原因无效
答案 2 :(得分:0)
$ scope不能用于注入服务,但是你可以使用像这样的参数传递它。
app.factory('Hututoo', function ($resource) {
var somePrivateVar = [];
return {
set: function(scopeVar){
somePrivateVar.push(scopeVar);
},
get: function(){
return somePrivateVar;
}
}
});
然后在控制器
Hututoo.set($scope.anyVar);