我在控制器中從服務中獲取價值時遇到問題。 我從API使用服務的價值:AngularJS從服務功能中獲取價值
angular.module('app').factory('service',
['$q', '$rootScope', '$timeout', '$http',
function ($q, $rootScope, $timeout, $http) {
// create user variable
var user = null;
// return available functions for use in the controllers
return ({
isLoggedIn: isLoggedIn,
getUserStatus: getUserStatus,
login: login,
getEmail: getEmail
});
function isLoggedIn() {
if(user) {
return true;
} else {
return false;
}
}
function getUserStatus() {
return $http.get('/user/status')
// handle success
.success(function (data) {
if(data.status){
user = true;
} else {
user = false;
}
})
// handle error
.error(function (data) {
user = false;
});
}
function login(username, password) {
// create a new instance of deferred
var deferred = $q.defer();
// send a post request to the server
$http.post('/user/login',
{username: username, password: password})
// handle success
.success(function (data, status) {
if(status === 200 && data.status){
user = true;
deferred.resolve();
} else {
user = false;
deferred.reject();
}
})
// handle error
.error(function (data) {
user = false;
deferred.reject();
});
// return promise object
return deferred.promise;
}
function getEmail() {
// create a new instance of deferred
var deferred = $q.defer();
$http.get('/email/'+$rootScope.username)
.success(function (data) {
console.log(data);
deferred.resolve();
})
.error(function (data) {
deferred.reject();
})
return deferred.promise;
}
}]);
我試圖在控制器到達和使用價值:
angular.module('app')
.controller('myController', ['$rootScope', '$scope', '$state', '$http', '$q', 'service', function ($rootScope, $scope, $state, $http, $q, service) {
$scope.email;
$scope.getEmail = function() {
// call getEmailFromDB from service
service.getEmail()
// handle success
.then(function (data) {
$scope.email = data; //here I got undefined
console.log($scope.email);
})
// handle error
.catch(function() {
$scope.error = true;
$scope.errorMessage = "[email protected]";
});
};
$scope.getEmail();
}]);
但在控制器有undefined
值。
關於$ q的文檔,我用在服務和控制器then()
功能。
有誰知道問題在哪裏?
請閱讀http://blog.ninja-squad.com/2015/05/28/angularjs-promises/,因爲您正在使用已棄用(並在1.6版中刪除)的success()和error(),並且您正在使用反模式,因爲不使用鏈接。 –
您不需要在$ promise中包裝$ http調用。默認情況下,AngularJS爲您創建承諾。 – tomepejo