javascript - AngularJS 类型错误 : "track" is not a function

标签 javascript angularjs angularjs-service angularjs-http

我正在尝试使用我的 Controller 方法中的参数调用服务,但我收到一条错误消息,指出它不是一个函数。这是我的代码:

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

知道为什么我的 Controller 会出现错误:TypeError: trackService.currentTrack is not a function

最佳答案

@Pankaj Parkar 的回答是正确的,因为您应该从 currentTrack 返回一个 promise ,以便在您的 Controller 中链接 then

但是,为了回答有关 TypeError 的问题,您在 TrackService 中混合了工厂和服务语法。

要使其成为工厂,返回公开函数的映射:

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

    function currentTrack(releaseSlug, trackSlug){
        //...
    }

    return trackService;
}

并用.factory('TrackService', TrackService);声明。

要使其成为服务,请将公开的函数添加到this:

function TrackService($http, $q){
    this.currentTrack = currentTrack;

    function currentTrack(releaseSlug, trackSlug){
        //...
    }
}

并使用 .service('TrackService', TrackService); 声明。

关于javascript - AngularJS 类型错误 : "track" is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210773/

相关文章:

angularjs - 如何从 Angular JS 中的另一个 Controller 成功回调调用 Controller 服务

javascript - Flask 和 JavaScript 删除前确认

angularjs - 如何使用 Angular Material md-grid-list

angularjs - 在 Angular 中修改数组不起作用

AngularJS - 在 Controller 中转换日期

javascript - $http 请求的后台处理通知

javascript - 在 Angular 中读取属性文件值

javascript - Angular 应用程序中的 Angular 元素在优化时会产生无限重新加载问题

javascript - 来自指令模板函数的 Angular 访问范围

javascript - 如何检索 HTML 元素的实际宽度和高度?