AngularJS TypeError:“ track”不是一个函数

Noobcoder

我试图从控制器方法中调用带有参数的服务,但出现错误消息说它不是函数。这是我的代码:

(function (){

angular.module('app.uploadedReleases')
        .controller('UploadedReleasesController', UploadedReleasesController)
        .controller('ModalController', ModalController);


UploadedReleasesController.$inject = ['$log', '$scope', '$modal', 'ReleaseService', 'TrackService'];
function UploadedReleasesController ($log, $scope, $modal, releaseService, trackService){

        vm.selectTrack = selectTrack;

       function selectTrack(album, track, index){

        trackService.currentTrack(album.slug, track.fileName).then(function(responseValue){
            vm.temp = responseValue;
        });
        vm.formTrack = vm.selected.track;
    }
}

这是我的名为trackService的服务:

angular.module('app.services')
        .service('TrackService', TrackService);

TrackService.$inject = ['$http', '$q'];

function TrackService($http, $q){
    var trackService = {};

    var releasesUrl = 'http://localhost:8080/api/releases';
    trackService.currentTrack = currentTrack;

        function currentTrack(releaseSlug, trackSlug){
        var trackUrl = releasesUrl + '/'+ releaseSlug + '/' + trackSlug + '/track';
        var deferred = $q.defer();

        $http.get(trackUrl).then(function(trackResponse){
            return deferred.resolve(trackResponse);
        }, function(error){
            return deferred.reject({msg: 'Error while getting the current track details'})
        });
      return deferred.promise;
    }
}

我为什么会在控制器中收到错误的任何想法: TypeError: trackService.currentTrack is not a function

潘卡·帕克(Pankaj Parkar)

我要说的第一件事是,您正在创建服务,然后应将方法绑定到this上下文,而不是创建对象。

var trackService = {};

会变成

var trackService = this;

但是从服务中返回自定义对象也没有错。因此,在当前情况下,您错过了退还的费用。在您的服务代码末尾添加

return trackService 

仍然对服务和工厂的工作方式感到困惑,我建议您仔细阅读此答案


您应该从trackService.currentTrack以自定义方式创建的方法中返回一个Promise

trackService.currentTrack = currentTrack;
function currentTrack(releaseSlug, trackSlug){
    var trackUrl = releasesUrl + '/'+ releaseSlug + '/' + trackSlug + '/track';
    var deferred = $q.defer();
    $http.get(trackUrl).then(function(trackResponse){
        return deferred.resolve(trackResponse);
    }, function(error){
        return deferred.reject({msg: 'Error while getting the current track details'})
    });
    return deferred.promise; //returned promise
}

相反,您应该做自己的自定义承诺,该自定义承诺被视为反模式,以在您有$http.get方法返回的承诺的地方实现,您应该利用它。

重构版本

trackService.currentTrack = currentTrack;
    function currentTrack(releaseSlug, trackSlug){
    var trackUrl = releasesUrl + '/'+ releaseSlug + '/' + trackSlug + '/track';
    return $http.get(trackUrl).then(function(trackResponse){
        return trackResponse;
    }, function(error){
        return {msg: 'Error while getting the current track details'};
    });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS TypeError:$资源不是一个函数

来自分类Dev

TypeError:undefined不是一个函数-AngularJS + jQuery

来自分类Dev

AngularJS TypeError:$资源不是一个函数

来自分类Dev

使用AngularJS的模态无法打开,出现TypeError:undefined不是一个函数

来自分类Dev

Angularjs TypeError:不是函数问题

来自分类Dev

TypeError:jQuery(...)。on不是一个函数

来自分类Dev

TypeError:this。$ set不是一个函数

来自分类Dev

TypeError:require(...)不是一个函数

来自分类Dev

TypeError:$(...)。datepicker不是一个函数

来自分类Dev

TypeError:* .getMonth不是一个函数

来自分类Dev

TypeError:func(...)。then不是一个函数

来自分类Dev

TypeError:$(...)。dialog不是一个函数

来自分类Dev

TypeError:$(...)。datepicker不是一个函数

来自分类Dev

TypeError:$(...)。visualize不是一个函数

来自分类Dev

TypeError:require(...)不是一个函数

来自分类Dev

TypeError:$ .mainBowerFiles不是一个函数

来自分类Dev

AngularJS $ parse TypeError:对象不是函数

来自分类Dev

获取TypeError:undefined不是AngularJS函数

来自分类Dev

TypeError:未定义不是函数-AngularJS

来自分类Dev

AngularJS指令TypeError:对象不是函数

来自分类Dev

获取TypeError:undefined不是AngularJS函数

来自分类Dev

TypeError:未定义不是函数(AngularJS)

来自分类Dev

TypeError:<Array> .each不是一个函数

来自分类Dev

JavaScript TypeError:$(...)。parent不是一个函数

来自分类Dev

Angular JS TypeError:$ http不是一个函数

来自分类常见问题

NodeJs:TypeError:require(...)不是一个函数

来自分类Dev

Sequelize TypeError Associate不是一个函数

来自分类Dev

TypeError:$ .fn.dataTable.moment不是一个函数

来自分类Dev

TypeError:THREE.Math.lerp不是一个函数

Related 相关文章

  1. 1

    AngularJS TypeError:$资源不是一个函数

  2. 2

    TypeError:undefined不是一个函数-AngularJS + jQuery

  3. 3

    AngularJS TypeError:$资源不是一个函数

  4. 4

    使用AngularJS的模态无法打开,出现TypeError:undefined不是一个函数

  5. 5

    Angularjs TypeError:不是函数问题

  6. 6

    TypeError:jQuery(...)。on不是一个函数

  7. 7

    TypeError:this。$ set不是一个函数

  8. 8

    TypeError:require(...)不是一个函数

  9. 9

    TypeError:$(...)。datepicker不是一个函数

  10. 10

    TypeError:* .getMonth不是一个函数

  11. 11

    TypeError:func(...)。then不是一个函数

  12. 12

    TypeError:$(...)。dialog不是一个函数

  13. 13

    TypeError:$(...)。datepicker不是一个函数

  14. 14

    TypeError:$(...)。visualize不是一个函数

  15. 15

    TypeError:require(...)不是一个函数

  16. 16

    TypeError:$ .mainBowerFiles不是一个函数

  17. 17

    AngularJS $ parse TypeError:对象不是函数

  18. 18

    获取TypeError:undefined不是AngularJS函数

  19. 19

    TypeError:未定义不是函数-AngularJS

  20. 20

    AngularJS指令TypeError:对象不是函数

  21. 21

    获取TypeError:undefined不是AngularJS函数

  22. 22

    TypeError:未定义不是函数(AngularJS)

  23. 23

    TypeError:<Array> .each不是一个函数

  24. 24

    JavaScript TypeError:$(...)。parent不是一个函数

  25. 25

    Angular JS TypeError:$ http不是一个函数

  26. 26

    NodeJs:TypeError:require(...)不是一个函数

  27. 27

    Sequelize TypeError Associate不是一个函数

  28. 28

    TypeError:$ .fn.dataTable.moment不是一个函数

  29. 29

    TypeError:THREE.Math.lerp不是一个函数

热门标签

归档