Angularjs控制器调用服务 - .success如果不是函数

时间:2016-07-13 17:59:42

标签: angularjs

我正在使用控制器调用将发出$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,
        };
    }

})();

2 个答案:

答案 0 :(得分:1)

successerror是承诺的一部分,您不会回复承诺。

要使其有效,您应该使用resolvesuccess

defer

并返回后来与.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,
        };
    }

答案 1 :(得分:1)

为了被束缚,它应该返回一个固定的承诺。

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,
    };
}

顺便说一句,successerror是旧方法。它现在始终为thencatch