Javascript AngularJS:如何从工厂获取返回值

Javascript AngularJS:如何从工厂获取返回值,javascript,angularjs,promise,angular-promise,angularjs-http,Javascript,Angularjs,Promise,Angular Promise,Angularjs Http,我对AngularJS非常陌生,我有以下问题: 视图: 我有以下工厂: myApp.factory('getURLService', function ($http, config) { return { getURL: function (user,scope) { $http.get(config.backend + "/Device/GetURLbyCode", { params: { code: user.c

我对AngularJS非常陌生,我有以下问题:

视图:

我有以下工厂:

myApp.factory('getURLService', function ($http, config) {
    return {
        getURL: function (user,scope) {
            $http.get(config.backend + "/Device/GetURLbyCode", {
                params: { code: user.code }
            })
            .success(function (data) {
                var url = '';
                if (data.status == 'succ') {
                    url = data.Result;
                }
                else {
                    scope.msgtxt = data.msg;
                }
                return url;
            });
        }
    }
});
我需要在其他工厂使用此工厂返回的值

例如,在我的登录工厂中:

myApp.factory('loginService', function ($http, $location, config) {
    return {
        login: function (user,url,scope) {

            $http.get(url + "/Device/Register", {
                params: { userName: user.username, password: user.password }
            })
            .success(function (data) {
                if (data.status == 'succ') {
                    $location.path('/welcome');
                }
                else {
                    scope.msgtxt = data.msg;
                }
            });
        }
    }
});
这是我的控制器:

myApp.controller('loginCtrl', function ($scope, getURLService, loginService) {
    $scope.msgtxt = '';

    $scope.login = function (user) {
        loginService.login(user,url,$scope); //call login service
    }
});
我需要在我的控制器中做什么才能实际返回url,然后在将来将其发送到登录服务或任何其他服务(甚至控制器)


提前感谢您的时间和建议。

对于从函数返回的数据,您应该返回promise对象,该对象
$http.get
已经返回了它

我想指出的另一件事是,将$scope传递给服务违反了singleton规则,因为您正在创建一个依赖于控制器作用域的服务。服务应该只接受参数并通过处理它来返回结果,而不是其他

代码

return {
    getURL: function (user,scope) {
        return $http.get(config.backend + "/Device/GetURLbyCode", {
            params: { code: user.code }
        })
        .then(function (res) {
            var data = res.data;
            var url = '';
            if (data.status == 'succ') {
                url = data.Result;
            }
            else {
                scope.msgtxt = data.msg;
            }
            return url;
        });
    }
}
myApp.factory('loginService', function ($http, $location, config) {
    return {
        login: function (user,url) {

            return $http.get(url + "/Device/Register", {
                params: { userName: user.username, password: user.password }
            })
            .then(function (response) {
                var data = response.data;
                if (data.status == 'succ') {
                    $location.path('/welcome');
                    return;
                }
                return data.msg;
            });
        }
    }
});
登录服务

return {
    getURL: function (user,scope) {
        return $http.get(config.backend + "/Device/GetURLbyCode", {
            params: { code: user.code }
        })
        .then(function (res) {
            var data = res.data;
            var url = '';
            if (data.status == 'succ') {
                url = data.Result;
            }
            else {
                scope.msgtxt = data.msg;
            }
            return url;
        });
    }
}
myApp.factory('loginService', function ($http, $location, config) {
    return {
        login: function (user,url) {

            return $http.get(url + "/Device/Register", {
                params: { userName: user.username, password: user.password }
            })
            .then(function (response) {
                var data = response.data;
                if (data.status == 'succ') {
                    $location.path('/welcome');
                    return;
                }
                return data.msg;
            });
        }
    }
});
控制器

getURLService.getURL(user).then(function(url){
     //assuming you already having value of user available here
     loginService.login(user,url).then(function(message){ //call login service
         if(message)
            $scope.msgtxt = message;
     }); 
});

首先感谢您的快速回复。我得到一个错误,代码未定义。如何将其传递给getURL服务?很抱歉我的新手问题。@wolf基本上您需要将用户对象传递给getUrlmethod@Wolf您应该填充用户对象..我假设在编写答案时..我不确定是否遵循,用户对象是我在输入字段中插入的对象。我对这个问题补充了我的观点,如果这更有意义的话。