Javascript 为什么angularjs中没有函数错误?
我正在学习我在上找到的教程。Javascript 为什么angularjs中没有函数错误?,javascript,angularjs,Javascript,Angularjs,我正在学习我在上找到的教程。 我试图理解AngularJS是如何工作的,但我无法运行编辑函数(控制器)。我总是收到类型错误: TypeError: SearchService.fetch is not a function 在其调用堆栈中,它引用了指向以下代码行的EditController: SearchService.fetch($stateParams.id, function (response) { 以下是EditController的全部代码: (function () {
我试图理解AngularJS是如何工作的,但我无法运行编辑函数(控制器)。我总是收到类型错误:
TypeError: SearchService.fetch is not a function
在其调用堆栈中,它引用了指向以下代码行的EditController:
SearchService.fetch($stateParams.id, function (response) {
以下是EditController的全部代码:
(function () {
'use strict';
angular
.module('myApp')
.controller('EditController', EditController);
EditController.$inject = ['SearchService', '$stateParams'];
function EditController(SearchService, $stateParams) {
var vm = this;
SearchService.fetch($stateParams.id, function (response) {
vm.person = response;
});
}
})();
(function () {
'use strict';
angular
.module('myApp')
.factory('SearchService', SearchService);
SearchService.$inject = ['$resource'];
function SearchService($resource) {
return $resource('/api/search/people.json');
}
SearchService.fetch = function (id, callback) {
Search.query(function (response) {
var results = response.filter(function (item) {
return item.id === parseInt(id);
});
return callback(results[0]);
});
};
})();
但是我不知道这里出了什么问题。我正在尝试将此代码与SearchController的代码进行比较-请参见下文
(function () {
'use strict';
angular
.module('myApp')
.controller('SearchController', SearchController);
SearchController.$inject = ['SearchService'];
function SearchController(SearchService) {
var vm = this;
vm.search = function(){
SearchService.query(vm.term, function (response) {
var results = response.filter(function (item) {
return JSON.stringify(item).toLowerCase().includes(vm.term.toLowerCase());
});
vm.searchResults = results;
});
}
}
})();
以下是搜索服务的代码:
(function () {
'use strict';
angular
.module('myApp')
.controller('EditController', EditController);
EditController.$inject = ['SearchService', '$stateParams'];
function EditController(SearchService, $stateParams) {
var vm = this;
SearchService.fetch($stateParams.id, function (response) {
vm.person = response;
});
}
})();
(function () {
'use strict';
angular
.module('myApp')
.factory('SearchService', SearchService);
SearchService.$inject = ['$resource'];
function SearchService($resource) {
return $resource('/api/search/people.json');
}
SearchService.fetch = function (id, callback) {
Search.query(function (response) {
var results = response.filter(function (item) {
return item.id === parseInt(id);
});
return callback(results[0]);
});
};
})();
感谢您的任何建议,我已经花了几天时间尝试了各种各样的东西。让您的搜索服务像这样 服务工厂函数生成表示应用程序其余部分的服务的单个对象或函数。服务返回的对象或函数被注入到指定对服务依赖关系的任何组件(控制器、服务、筛选器或指令)中
看到这些代码,我们甚至不知道
SearchService
是否是一项服务。(你在哪里定义了fetch?)因为你的错误指出SearchService.fetch不是一个函数……它在任何地方都没有定义,但你正在尝试使用它……我怀疑你是否需要使用SearchService.search而不是SearchService.fetch。你是否将search.service.js链接到了你的html文件。它必须是app.js文件后的链接。Hi@ivo,请检查您是否为其定义了获取函数。感谢您的贡献和建议。我已经像你写的那样试过了,但是现在我得到了错误:TypeError:SearchService.query不是一个函数…Search.query?搜索是服务吗?你注射了吗?我没有在SearchController中做任何更改;我刚刚用你在答案中写的代码替换了原来的代码。我正在服务中询问。搜索也是服务,对吗?搜索服务代码在哪里?恐怕我在这里迷路了。在您回答之后,我做的唯一一件事就是用您提供的代码替换SearchService中的代码。SearchService的原始代码在我的问题中。