我正在尝试从我的dataservice工厂调用一个函数,但它会抛出一个错误 无法读取未定义的属性“登录”
这是我的数据服务工厂
(function(){
'use strict';
// dataservice factory
angular
.module('app')
.factory('dataservice', dataservice);
dataservice.$inject = ['$http'];
function dataservice($http) {
return {
login : login
}
function login(username, password, callback) {
$http.post('/data', { username: username, password: password })
.success(function (response) {
console.log(response);
});
}
}
})();
这是我的控制器
(function(){
'use strict';
angular
.module('app')
.controller('TestController', TestController);
TestController.$inject = ['dataservice'];
function TestController(dataservice) {
var vm = this;
vm.login = login;
function login() {
console.log('is this called?');
vm.loading = true;
dataservice.login(vm.username, vm.password, function (result) {
console.log(result);
});
}
}
})();
登录功能当我从视图中按下登录时会调用它,因为我得到: 在我的控制台中被称为 。
答案 0 :(得分:3)
您需要在then
块
function login() {
console.log('is this called?');
vm.loading = true;
dataservice.login(vm.username, vm.password).then(function (result) {
console.log(result);
}, function(error){
});
}
这是正确的语法。
您也可以使用此服务语法
function login(){
var d = $q.defer();
$http({
method: 'POST',
url: '/data',
data:{
username : username,
password : password
}
}).success(function(response){
d.resolve(response);
}).error(function(response){
d.reject(response);
});
return d.promise;
}
答案 1 :(得分:2)
我将您的示例更正为更常见和可读的语法。 Check this fiddle要看到它的实际效果。
the type of one of the expressions in the join clause is incorrect