【问题标题】:How to call service function in a controller with AngularJS?如何使用 AngularJS 在控制器中调用服务功能?
【发布时间】:2016-03-09 01:39:37
【问题描述】:

我正在尝试从控制器中的服务调用函数,但我收到一条错误消息,指出我正在调用的东西不是函数。我是 AngularJS 的新手,所以我不确定我做错了什么。那么,在控制器中调用服务函数的正确方法是什么?

我正在尝试在ProfileCtrl 中拨打getCurrentUserInfo

.service('AuthService', function($http, Backand){    
    function getCurrentUserInfo() {
        return $http({
            method: 'GET',
            url: baseUrl + "users",
            params: {
                filter: JSON.stringify([{
                    fieldName: "email",
                    operator: "contains",
                    value: self.currentUser.name
                }])
            }
        }).then(function (response) {
            if (response.data && response.data.data && response.data.data.length == 1)
                return response.data.data[0];
        });
    }
})

.controller('ProfileCtrl', ['$scope', '$ionicSideMenuDelegate', 'AuthService', function($scope, $ionicSideMenuDelegate, AuthService) {

  AuthService.getCurrentUserInfo().then(function(response){
   $scope.user = response.data.data;
});

//  function getCurrentUserInfo() {
//    AuthService.getCurrentUserInfo()
//    .then(function (result) {
//      $scope.user = result.data;
//    });
//  }

}])

【问题讨论】:

标签: angularjs


【解决方案1】:

您需要将其设为this 的属性。

   .service('AuthService', function($http, Backand){    
        this.getCurrentUserInfo = function() {
            return $http({
                method: 'GET',
                url: baseUrl + "users",
                params: {
                    filter: JSON.stringify([{
                        fieldName: "email",
                        operator: "contains",
                        value: self.currentUser.name
                    }])
                }
            }).then(function (response) {
                if (response.data && response.data.data && response.data.data.length == 1)
                    return response.data.data[0];
            });
        }
    })

然后在你的控制器中

AuthService.getCurrentUserInfo(whatEverYourParamsAre)

编辑:实际上,让我提供一点上下文。 Angular 将new 函数应用于您包含在控制器中的每个.service(....)。众所周知,在构造函数中调用 this.aFunction 会导致 javascript 中的 new 运算符将 aFunction 函数视为构造函数返回的对象的属性。

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2017-10-11
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多