我正在将代码从.controller转移到工厂
这是从控制器
运行的代码.controller('ChatsCtrl', function ($scope, $http, $rootScope) {
$http.get('http://<my_ip>:<my_port>/chats', { params: { user_id: $rootScope.session } }).success(function (response) {
$scope.chats = response;
});
})
我希望将其重构为工厂,以便控制器看起来像这样
.controller('ChatsCtrl', function ($scope, Chats) {
$scope.chats = Chats.all();
})
所以工厂就像这样
.factory('Chats', function() {
return {
all: function ($scope, $http, $rootScope) {
return $http.get('http://<my_ip>:<my_port>/chats', { params: { user_id: $rootScope.session } }).success(function (response) {
$scope.chats = response;
});
}
};
});
因此,当我将代码移动到工厂时,它不会从我的数据库中提取任何内容。我在控制器中引用了“聊天”工厂,但它似乎没有提取数据。
答案 0 :(得分:1)
返回设置的承诺并将其分配给控制器中的范围。更像这样。
.controller('ChatsCtrl', function ($scope, Chats) {
Chats.all().success(function (data) {
$scope.chats = data;
})
})
.factory('Chats', function($http, $rootScope) {
return {
all: function () {
return $http.get('http://<my_ip>:<my_port>/chats',
{ params: { user_id: $rootScope.session } })
}
};
});
答案 1 :(得分:1)
您可以从工厂返回承诺并在控制器中执行.success(如果您的数据没有更改,可选择在工厂中使用缓存)
.factory('Chats', function() {
return {
all: function ($scope, $http, $rootScope) {
return $http.get('http://<my_ip>:<my_port>/chats', { params: { user_id: $rootScope.session } })
}
};
});
.controller('ChatsCtrl', function ($scope, Chats) {
Chats.all().success(function (response) {
$scope.chats = response;
});
})