私のコントローラでサービスから値を得ることに問題があります。 私はサービス使用して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
値があります。私のコンソールで
、私はサービスとコントローラでthen()
関数を使用します。
どこに問題があるか知りませんか?
success()とerror()を使用しています(1.6で廃止されました)ので、http://blog.ninja-squad.com/2015/05/28/angularjs-promises/をお読みください。連鎖を使用しないことでアンチパターンを使用しています。 –
約束で$ http呼び出しをラップする必要はありません。デフォルトでAngularJSはあなたのための約束を作成します。 – tomepejo