为什么我在angularjs中没有出现函数错误?

时间:2017-06-13 07:15:13

标签: javascript angularjs

我正在遵循我在Stormpath找到的本教程 我试图了解AngularJS是如何工作的,但我没有让编辑功能(控制器)运行。我总是收到类型错误

DELETE

在其callstack中,它引用 EditController 指向这行代码:

TypeError: SearchService.fetch is not a function

以下是 EditController 的完整代码:

SearchService.fetch($stateParams.id, function (response) {

但是我不知道这里有什么问题。我想将此代码与 SearchController 的代码进行比较 - 请参阅下文,

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


})();

以下是 SearchService 的代码:

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

任何建议都表示赞赏,我已经花了几天时间尝试各种各样的事情。

1 个答案:

答案 0 :(得分:1)

像这样制作您的搜索服务..

  

服务工厂函数生成表示应用程序其余部分服务的单个对象或函数。服务返回的对象或函数被注入到指定服务依赖性的任何组件(控制器,服务,过滤器或指令)

https://docs.angularjs.org/guide/services

(function () {
'use strict';

angular.module('myApp')
    .factory('SearchService', SearchService);

SearchService.$inject = ['$resource'];

function SearchService($resource, $http) {
 var service = {};
 service.url = $resource('/api/search/people.json');
var req = {
 method: 'GET',
 url: 'http://example.com',
 headers: {
   'Content-Type': undefined
 },
 data: { test: 'test' }

}

 service.fetch = function (id, callback) {
 // $http.get('yourapi.json').then() you can try like this also
      return $http(req).then(function (response) {
      var results = response.filter(function (item) {
         return item.id === parseInt(id);
      });
      return callback(results[0]);
   });
};
    return service;
}   
})();