2017-02-23 31 views
0

Я работаю над угловым проектом, где я добавляю новые функции в более старый проект.
Я пытаюсь зарегистрировать службу с моим контроллером, но получаю сообщение об ошибке, когда мой контроллер не может найти функции в сервисе.Не удается получить доступ к контроллеру angularjs

Вот как определяется мой контроллер (я знаю, что это не стандартный способ, но я должен следить за этим, потому что все приложение делает.)

angular.module("test").controller("listCtrl", listCtrl); 
listCtrl.$inject = ["$scope", "$state", "$timeout", "listService", "$rootScope"]; 

function listCtrl($scope, $state, $timeout, listService, $rootScope) { 
    this.$scope= $scope; 

    $scope.service=listService; 
    //some other definitions 

    $scope.items = $scope.service.getPage(%function_ARGUMENTS%); 

} 

Вот как определяется служба:

angular.module("test").service("listService", listService); 
listService.$inject = ['$state', '$rootScope']; 

function listService($state, $rootScope) { 
    function getPage(%function_ARGUMENTS%) { 
    //getPage function definition goes here 
    } 
} 

Теперь, по какой-то причине, я получаю ошибку:

Cannot read property 'getPage' of undefined

Я не могу понять, что migh Это может быть причиной этого.
Является ли проблема с тем, как определяется $scope? Если да, то каков был бы правильный способ сделать это, предполагая, что this.$scope=$scope изменить нельзя.

EDIT: Устранено множественное опечатки в вопросе. У меня нет этой опечатки в моей программе, это была ошибка, которую я сделал при наборе на SO.

+0

У вас есть опечатка в '$ scope.services.getPage (% function_ARGUMENTS%); 'он должен быть' $ scope.service.getPage (% function_ARGUMENTS%); ' –

+0

Я исправил опечатку в вопросе, опечатка не является тем, что вызывает ошибку в моей основной программе. – ChaoticTwist

+0

Я тоже написал ответ, так или иначе, вы поняли, что проблема важна. –

ответ

1

Ожидается ошибка, так как вы определили $scope.service, где, используя $scope.services, обратите внимание на дополнительные "s". Поэтому используйте правильные переменную

$scope.items = $scope.service.getPage(%function_ARGUMENTS%); 

Однако, вы будете с до получить другую ошибку как функции getPage с, связанными с объектом возврата службы.

function listService($state, $rootScope) { 
    this.getPage = function() { 
    //getPage function definition goes here 
    } 
} 

ИЛИ

function listService($state, $rootScope) { 
    function getPage() { 
    //getPage function definition goes here 
    } 

    this.getPage = getPage; 
} 
+0

Исправлена ​​опечатка в вопросе. Ваш ответ помог. Я не зарегистрировал функцию в службе. Благодарю. :) – ChaoticTwist

1
angular.module("test").factory("listService", listService); 
listService.$inject = ['$state', '$rootScope'];  

function listService($state, $rootScope) { 
    return { 
     function getPage(%function_ARGUMENTS%) { 
     //getPage function definition goes here 
     } 
    } 
} 

Просто напишите выше, как вы функции обслуживания.

1

Я также заметил: $ scope.items = $ scope.services.getPage (% function_ARGUMENTS%);

должно быть: $ scope.items = $ scope.service.getPage (% function_ARGUMENTS%);

$ scope.service был плюрализован на этой линии, когда он должен быть сингулярным.

Также вы используете сервисную службу, которая является функцией-конструктором. Поэтому вам нужно ссылаться на свои свойства с помощью этого ключевого слова. Метод угловой службы создает объект внутри, используя новое ключевое слово. Вы можете попробовать завод:

angular.module("test") 
    .factory("listService", listService); 
    listService.$inject = ['$state', '$rootScope']; 

    function listService($state, $rootScope) { 
    function getPage(%function_ARGUMENTS%) { 
     //getPage function definition goes here 
    } 
    return { 
     getPage: getPage 
    }; 
} 

Это больше похоже на то, что у вас, и вам не нужно использовать this ключевое слово, так как это не функции конструктора.

Надеюсь, это поможет!

Cheers

Смежные вопросы