gpt4 book ai didi

javascript - 错误消息 - 在使用 Angular 服务原型(prototype)时不是一个函数

转载 作者:行者123 更新时间:2023-12-03 03:05:06 27 4
gpt4 key购买 nike

我正在为名为“UploadService”的上传构建一些可重用代码的 Angular 服务,该代码在下面的 Controller 中被调用 - 即使该服务已加载,我总是收到以下错误

`UploadService.upload is not a function at h.$scope.uploadImage...)`

我的上传服务(UploadService.js)

abcdServices.service('UploadService', function(ApiService, $http, $localStorage, $location, $timeout, $q, $rootScope, Upload) {

var UploadService = function() {
this.upload_in_progress = false;
this.attached_media = {
photos: [],
videos: []
}
};

UploadService.prototype.upload = function(files) {
console.log('get here');

};

return UploadService;

});

//调用服务的我的 Controller - 请注意我已将其添加到

    $scope.uploadImage = function(files, fileIndex, imageIndex) {
console.log('existing upload image');
console.log(files); // this shows an array in the console log as expected
UploadService.prototype.upload(files);

}

// Controller 在顶部加载了服务,我已将 UserService.js 文件包含在 index.php 中

abcdControllers.controller('PostController', function( $http, $rootScope, UploadService) {

最佳答案

原型(prototype)只是一种将实例成员添加到“类”的 JavaScript 方法。关键是,您必须直接使用 UploadService.upload() 而不是通过 prototype UploadService.prototype.upload() 因为 UploadService 不是对该类的引用,AngularJS 的注入(inject)器为您提供该类的实例,当您声明服务 UploadService 时,AngularJS 会注入(inject)对 new UploadService 的单例引用().

此外,您以错误的方式声明服务类,您的方法不会返回注入(inject)器的 UploadService 类,它只返回一个返回 UploadService 的函数,该函数永远不会公开。更好的方法是像下面的代码:

abcdServices.service('UploadService', function UploadService(ApiService, $http, $localStorage, $location, $timeout, $q, $rootScope, Upload) {    
this.upload_in_progress = false;
this.attached_media = {
photos: [],
videos: []
};

this.upload = function(files) {
console.log('get here');
};
});

或者您可以简单地将其更改为工厂提供程序并返回“类”的新实例:

abcdServices.factory('UploadService', function(ApiService, $http, $localStorage, $location, $timeout, $q, $rootScope, Upload) {    
var UploadService = function() {
this.upload_in_progress = false;
this.attached_media = {
photos: [],
videos: []
};
};

UploadService.prototype.upload = function(files) {
console.log('get here');
};

return new UploadService();
});

关于javascript - 错误消息 - 在使用 Angular 服务原型(prototype)时不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com