Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs控制器调用服务-。如果不是函数,则成功_Angularjs - Fatal编程技术网

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
结果和
然后
的错误。太棒了,这成功了,同时感谢您对不推荐的成功/错误的深入了解。