Angularjs控制器调用服务-。如果不是函数,则成功
我正在使用一个控制器来调用一个服务,该服务将发出Angularjs控制器调用服务-。如果不是函数,则成功,angularjs,Angularjs,我正在使用一个控制器来调用一个服务,该服务将发出$http请求,但现在我只将我的服务设置为返回字符串,因为我想确保它工作正常并且调用正确 当我运行它时,会出现以下错误: TypeError: monitorData.requestEvent(...).success is not a function 我的代码如下: 控制器 (function() { angular .module('monitorApp') .controller('eventCt
$http
请求,但现在我只将我的服务设置为返回字符串,因为我想确保它工作正常并且调用正确
当我运行它时,会出现以下错误:
TypeError: monitorData.requestEvent(...).success is not a function
我的代码如下:
控制器
(function() {
angular
.module('monitorApp')
.controller('eventCtrl', eventCtrl);
eventCtrl.$inject = ['$scope', '$routeParams', 'monitorData'];
function eventCtrl($scope, $routeParams, monitorData) {
var vm = this;
vm.eventid = $routeParams.eventid;
vm.event = {};
vm.getData = function(eventid) {
console.log("getData variable accessed");
monitorData.requestEvent(eventid)
.success(function(data) {
console.log(data);
})
.error(function(e) {
console.log("Error");
});
return false;
};
vm.getData(vm.eventid);
}
})();
(function() {
angular
.module('monitorApp')
.service('monitorData', monitorData);
monitorData.$inject = ['$http'];
function monitorData($http) {
var requestEvent = function(eventid) {
var gas = "Event " + eventid + " requested.."
console.log(gas);
return gas;
};
return {
requestEvent : requestEvent,
};
}
})();
服务
(function() {
angular
.module('monitorApp')
.controller('eventCtrl', eventCtrl);
eventCtrl.$inject = ['$scope', '$routeParams', 'monitorData'];
function eventCtrl($scope, $routeParams, monitorData) {
var vm = this;
vm.eventid = $routeParams.eventid;
vm.event = {};
vm.getData = function(eventid) {
console.log("getData variable accessed");
monitorData.requestEvent(eventid)
.success(function(data) {
console.log(data);
})
.error(function(e) {
console.log("Error");
});
return false;
};
vm.getData(vm.eventid);
}
})();
(function() {
angular
.module('monitorApp')
.service('monitorData', monitorData);
monitorData.$inject = ['$http'];
function monitorData($http) {
var requestEvent = function(eventid) {
var gas = "Event " + eventid + " requested.."
console.log(gas);
return gas;
};
return {
requestEvent : requestEvent,
};
}
})();
success
和error
是承诺的一部分,您不会返回承诺
要使其工作,您应该使用哪个解决到成功
并返回承诺,该承诺随后链接到.success
和.error
monitorData.$inject = ['$http','$q'];
var defer = $q.defer();
function monitorData($http) {
var requestEvent = function(eventid) {
var gas = "Event " + eventid + " requested.."
defer.resolve(gas)
return defer.promise;
};
return {
requestEvent : requestEvent,
};
}
success
和error
是承诺的一部分,您不会返回承诺
要使其工作,您应该使用哪个解决到成功
并返回承诺,该承诺随后链接到.success
和.error
monitorData.$inject = ['$http','$q'];
var defer = $q.defer();
function monitorData($http) {
var requestEvent = function(eventid) {
var gas = "Event " + eventid + " requested.."
defer.resolve(gas)
return defer.promise;
};
return {
requestEvent : requestEvent,
};
}
为了被束缚,它应该返回一个已确定的承诺
monitorData.$inject = ['$http', '$q'];
function monitorData($http, $q) {
var requestEvent = function(eventid) {
var gas = "Event " + eventid + " requested.."
console.log(gas);
return $q.resolve(gas);
};
return {
requestEvent : requestEvent,
};
}
顺便说一下,success
和error
是不推荐使用的遗留方法。它总是然后
和捕获
现在。为了被链接,它应该返回一个已确定的承诺
monitorData.$inject = ['$http', '$q'];
function monitorData($http, $q) {
var requestEvent = function(eventid) {
var gas = "Event " + eventid + " requested.."
console.log(gas);
return $q.resolve(gas);
};
return {
requestEvent : requestEvent,
};
}
顺便说一下,success
和error
是不推荐使用的遗留方法。现在总是then
和catch
。你需要使用$q
,然后使用defer.resolve
,使其工作。注意$q
并返回$q.when(gas)
而不仅仅是gas,它就会工作。不过,你应该使用then/catch而不是success/error。不推荐使用成功/错误处理程序。您需要先使用$q
,然后使用延迟.resolve
使其工作,然后使用$q
并返回$q.when(gas)
,而不仅仅是gas,它会工作。不过,您应该使用then/catch而不是success/error。不推荐使用成功/错误处理程序。并且控制器中的代码将与相同。成功和.error?返回$q.when(gas)
要容易得多。是的,您可以,但基本上我们使用这个,因为为了与ECMA6保持一致,控制器中的代码将与ECMA6保持一致。成功和.error?只返回$q.when(gas)
要容易得多。是的,你可以,但基本上我们使用这个,因为要与ECMA6保持一致,所以我简单地用“.success”替换“.success”,然后用“.catch”替换“.error”,这是正确的<代码>成功
和错误
是为了兼容性而存在的。它也可以是一个带有两个回调参数的然后。.then(…,…)
和.then(…).catch(…)
之间有一些区别catch
将捕获来自$http
结果和then
的错误。太棒了,这起作用了,同时感谢您对不推荐的成功/错误的洞察。因此我简单地将“.success”替换为“.then”和“.error”替换为“.catch”?这是正确的<代码>成功
和错误
是为了兼容性而存在的。它也可以是一个带有两个回调参数的然后。.then(…,…)
和.then(…).catch(…)
之间有一些区别catch
将捕获来自$http
结果和然后
的错误。太棒了,这成功了,同时感谢您对不推荐的成功/错误的深入了解。