[英]AngularJs call service function from controller undefined
I'm trying to call a function from my dataservice factory but it throws an error Cannot read property 'login' of undefined 我正在尝试从数据服务工厂调用函数,但会引发错误无法读取未定义的属性“登录”
Here is my dataservice factory 这是我的数据服务工厂
(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);
});
}
}
})();
Here is my controller 这是我的控制器
(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);
});
}
}
})();
login function it is called when i press login from view , since i get: is this called? 登录函数,当我从view按下login时被调用,因为我得到: 这叫吗? in my console .
在我的控制台中 。
You need to right the callback in a then
block 您需要在
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){
});
}
This is the correct syntax. 这是正确的语法。
Also you can use this service syntax 您也可以使用此服务语法
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;
}
I corrected your example to more common and readable syntax. 我已将您的示例更正为更通用和易读的语法。 Check this fiddle to see it in action.
检查这个小提琴 ,看看它的作用。
(function () {
'use strict';
// dataservice factory
var app = angular.module('app', []);
app.factory('dataservice', ['$http', function ($http) {
function login(username, password, callback) {
console.log('Login in dataservice...');
$http.post('/data', {username: username, password: password})
.then(function (response) {
console.log(response);
}, function (error) {
console.warn(error);
});
}
return {
login: login
};
}]);
app.controller('TestController', ['dataservice', function (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);
});
}
}]);
})
();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.