簡體   English   中英

我如何從角度獲取服務數據

[英]How can i get data from service in angular

我有LoginControllersecurityService

這是LoginCtrl

// place the message if something goes wrong
$scope.authMsg = '';
$scope.login = function () {
        $scope.authMsg = '';
        var loginData = {email: $scope.account.email, password: $scope.account.password};
        securityService.login(loginData);
    };

這是securityService

login: function (logData) {
    var _vm = this;

    $http
        .post('/api-token-auth/', logData)
        .then(function (response) {
            // assumes if ok, response is an object with some data, if not, a string with error
            // customize according to your api
            if (!response.data.token) {
                _vm.authMsg = 'Incorrect credentials.';
            } else {
                $cookieStore.put('djangotoken', response.data.token);
                $http.defaults.headers.common.Authorization = 'JWT ' + response.data.token;
                $http.get('/api/account/restricted/').then(function (response) {
                    authService.loginConfirmed();
                    _vm.currentUser = response.data;
                    $rootScope.currentUser = response.data;

                });
            }
        }, function (x) {
            _vm.authMsg = 'Server Request Error';
        });
},

此登錄工作正常,但是我的問題是我不知道如何從服務到控制器獲取authMesg ,因為這是異步的。 每當登錄無效時我都會收到空白消息

您需要使用angular的Promise服務來使您的控制器和服務Syn

 login: function (logData) {
                    var _vm = this,d= $$q.defer();

                    $http
                        .post('/api-token-auth/', logData)
                        .then(function (response) {
                            // assumes if ok, response is an object with some data, if not, a string with error
                            // customize according to your api
                            if (!response.data.token) {
                                _vm.authMsg = 'Incorrect credentials.';
                            } else {
                                $cookieStore.put('djangotoken', response.data.token);
                                $http.defaults.headers.common.Authorization = 'JWT ' + response.data.token;
                                $http.get('/api/account/restricted/').then(function (response) {
                                    authService.loginConfirmed();
                                    _vm.currentUser = response.data;
                                    $rootScope.currentUser = response.data;

                                });
                            }
                            d.resolve(vm.authMsg);

                        }, function (x) {
                            _vm.authMsg = 'Server Request Error';
                              d.reject(vm.authMsg);
                        });
                },

在控制器中,您需要解決這個承諾

securityService.login(loginData).then(function(data){
 consol.log(data); // get success data

},function(error){
   consol.log(data); // get error message data 
})

並在您的服務中注入$ q

這將為您提供authMsg

securityService.login(loginData).authMsg

但是,請遵循@Vigneswaran Marimuthu的評論,這是最佳做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM