对控制器的角度服务

时间:2016-11-07 19:15:58

标签: angularjs http service controller

我正在努力为控制器提供服务。我曾经把我的http请求放在我的控制器上,但现在我想改进并将http请求放在服务上。但我无法找到不起作用的东西

在我的控制器中

function testCtrl($scope,notify,UserLog) {
$scope.people = {};
    $scope.people = UserLog.getUser();
};

在我的服务中

.module('mymodule')
.service('UserLog',function($http){
function getUser(callback) {

var objUserInfo = new ActiveXObject("WScript.network");
var uname =  objUserInfo.UserName
var params= "/php/content_user_log.php?uid=" + uname

        $http.get(params).
            success(function(data, status) {
                callback(data,status);
                return data;

        }).

            error(function(data,status){
                callback(data,status);
                return data;
            });
        }

});

我厌倦了回调方法和/或返回数据,但我从控制台获得了相同的输出

TypeError: Object doesn't support property or method 'gestUser'

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您无法以这种方式声明成员。您必须将其添加到scope而不是.module('mymodule') .service('UserLog', function($http) { this.getUser = function(callback) { var objUserInfo = new ActiveXObject("WScript.network"); var uname = objUserInfo.UserName; var params = "/php/content_user_log.php?uid=" + uname $http.get(params) .success(function(data, status) { callback(data, status); return data; }) .error(function(data, status) { callback(data, status); return data; }); }; }); ,如下例所示:

.module('mymodule')
  .service('UserLog', function($http) {
    this.getUser = function() {

      var objUserInfo = new ActiveXObject("WScript.network");
      var uname = objUserInfo.UserName;
      var params = "/php/content_user_log.php?uid=" + uname

      return $http.get(params)
        .then(function(data, status) {
          return data;    
        });
    };    
  });

此外,考虑使用使用所需数据解析的promise而不是使用calback参数,处理状态和请求不是控制器的责任:

UserLog.getUser()    
    .then(function (user) {        
        $scope.user = user;        
    });

然后这样称呼它:

colors.remove(at: i)