所以,我是制作移动应用程序的Ionic和Angular新手。但是,我有一个基本的登录表单,以及一个成功调用控制器的登录按钮。控制器看起来像:
angular.module('starter.controllers', [])
.controller('LoginCtrl', function($scope, LoginService, $ionicPopup, $state) {
$scope.data = {};
$scope.login = function() {
LoginService.loginUser($scope.data.username, $scope.data.password)
.success(function(data) {
// $state.go('tab.dash');
var alertPopup = $ionicPopup.alert({
title: 'Login HERE!',
template: 'HERE: your credentials!'
});
}).error(function(data) {
var alertPopup = $ionicPopup.alert({
title: 'Login failed!',
template: 'Please check your credentials!'
});
});
}
});
现在调用的服务如下:
angular.module('starter.services', [])
.service('LoginService', function($http,$q) {
return {
loginUser : function(name, pw) {
console.log('username=' + name + ', password=' + pw);
var deferred = $q.defer();
var promise = deferred.promise;
var url = 'https://myURL/myapi/authenticate?username=' + name + '&password=' + pw;
console.log('url=' + url);
$http.get(url)
.success(function(data) {
console.log("success: data=" +data);
deferred.resolve(data);
})
.error(function() {
console.log("error");
deferred.reject("Failed to authenticate");
});
// Return the promise to the controller
promise.success = function(fn) {
promise.then(fn);
return promise;
}
promise.error = function(fn) {
promise.then(null, fn);
return promise;
}
return promise;
}
}
})
我已正确构建的URL,它正确调用RESTful api。 如果登录成功,我会将令牌ID作为单个字符串获取。 如果登录失败,我会收到一行作为错误消息。
我确实读过GET restful Web调用需要一组数据。我可以在controller.js中看到:String data = {};
我得到的真正错误信息是。控制器中的.ccess不会映射到获取字符串,而是映射到数组。
如果有人可以帮我解决我是否可以将数据设为数组,或者我是否可以使用单个字符串添加新的.success和.error,那就太棒了。
谢谢!
更新:
以下是我得到的例外情况:
08-17 11:08:56.412: E/Web Console(6538): TypeError: Object #<Object> has no method 'success'
08-17 11:08:56.412: E/Web Console(6538): at Scope.$scope.login (file:///android_asset/www/js/controllers.js:36:12)
08-17 11:08:56.412: E/Web Console(6538): at $parseFunctionCall (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:21172:18)
08-17 11:08:56.412: E/Web Console(6538): at IonicModule.config.factory.element.onclick (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:53674:9)
08-17 11:08:56.412: E/Web Console(6538): at Scope.$get.Scope.$eval (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:23228:28)
答案 0 :(得分:0)
您处理AFAICT的承诺过于复杂。我甚至不确定你要对所有这些成功和错误功能做些什么。你可以拥有:
angular.module('starter.services', [])
.service('LoginService', function($http,$q) {
return {
loginUser : function(name, pw) {
console.log('username=' + name + ', password=' + pw);
var url = 'https://myURL/myapi/authenticate?username=' + name + '&password=' + pw;
console.log('url=' + url);
return $http.get(url);
}
}
})