AngularJS) TypeError: serviceName.functionName () не является функцией

Я хочу сделать функцию «Вернуться при нажатии кнопки Cancel btn».

Это код просмотра

<div ng-controller = "goodCtrl">    
<button class = "btn" ng-click = "cancel()">Cancel</button>
</div>

А это Js-код

1) контроллер

function goodCtrl($scope, $log, goodService)
    $scope.cancel = function(){
        $log.debug("goodCtrl - cancel");
        goodService.cancel($scope);
    };

2) сервис

function goodService($log, $state)
    var methods = {
       cancel: function($scope) {
           $log.debug("goodService - cancel");
           $state.go('goback');
       }
    }

3) модуль

angular
    .module('goodmodule')
    .controller('goodCtrl', goodCtrl)
    .service('goodService', goodService)

Но у меня эта проблема

TypeError : serviceName.functionName() is not a function

Хотя существует так много элементов управления, служб и методов, написанных подобным образом, добавленные мной служба и контроллер недоступны. Что я упустил?

Это буквально сообщение об ошибке? Не вижу в вашем коде ничего подобного

Phil 27.03.2018 08:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку вы определили методы регистрации service, которые будут отображаться с использованием this

function goodService($log, $state) {
    this.cancel = function ($scope) {
        $log.debug("goodService - cancel");
        $state.go('goback');
    }
}

Я также рекомендовал бы вам использовать Аннотация зависимости, здесь я использовал аннотацию свойств $inject

 goodCtrl.$inject = ['$scope', '$log', 'goodService'];
 goodService.$inject = ['$log', '$state'];

Я решил проблему! это происходит из-за невозвращения методов. Благодарность!

zzangs33 28.03.2018 02:26

@ zzangs33, тогда вы должны определить его как factory, см. stackoverflow.com/questions/14324451/…

Satpal 28.03.2018 08:01
Ответ принят как подходящий

В angularjs, чтобы определить услуга, вам необходимо назначить свойства в ключевом слове это в функции услуга. Поскольку в angular js-конструкторе функция используется для создания настраиваемой службы. Ниже приведен код обновленной службы.

    function goodService($log, $state) {
    this.cancel = function ($scope) {
        $log.debug("goodService - cancel");
        $state.go('goback');
    }
}

Я решил проблему! это происходит из-за невозвращения методов. Благодарность!

zzangs33 28.03.2018 02:26

Другие вопросы по теме