внедрение сервиса в контроллер не работает

#angularjs

#angularjs

Вопрос:

введите описание изображения здесьЯ новичок в angularjs. Я пытаюсь использовать службу angular для публикации данных, но она выдает ошибку ниже

Ошибка angular.js: 12520: [$injector:unpr] Неизвестный поставщик: frontendServiceddProvider <- frontendServicedd <- CustSignupCtrl

service.js

 app.service('frontendService', function frontendService ($http, $q, $rootScope){

        var list = this;


        list.registerCust = function(data){
            var defer = $q.defer();

            $http({
                url: $rootScope.endPoint,
                method: "POST",
                data: data
            })
            .success(function(res){
                console.log("Successfull!");
                defer.resolve(res);
            })
            .error(function(err, status){
                console.log("Failed !");
            })

            return defer.promise;
        }

        return list;

    });
  

customer_signup.js

 app.controller('CustSignupCtrl', ['$scope', '$filter','frontendService', '$http', 'editableOptions', 'editableThemes','notify','notification','$appConstants',
  function('$scope', '$filter','frontendService', '$http','editableOptions', 'editableThemes','notify','notification','$appConstants'){


    $scope.pw1 = '';

    $scope.registerCustomer = function (data) {
      return frontendService.registerCust(data)
    }

    $scope.signupcustomer = function(){

      var payload= {
        first_name: $scope.custForm.fname,
        last_name: $scope.custForm.lname,
        phone: $scope.custForm.phone,
        email:$scope.custForm.email,
        username:$scope.custForm.username,
        password:$scope.custForm.pw1,
        usertype:3
      }
      console.log("inside function");
      $scope.registerCustomer(payload).then(function(data){
        notification.success(data.result);
      },function(err){
        notification.error("Error: contact system admin");
      });

    }
  }  
])
  

Я дал ссылку на оба файла js в index.html .. не понимаю, где я делаю неправильно .. кто-нибудь может помочь

Комментарии:

1. Ваши инъекции неверны. Переменные должны быть аналогичными ‘$scope’, ‘frontendService’, ‘$filter’, ‘$http’, ‘editableOptions’, ‘editableThemes’, ‘notify’, ‘notification’, ‘$ AppConstants’. Параметры вашей функции должны быть в том же порядке, что и в функции контроллера

Ответ №1:

 app.controller('CustSignupCtrl', ['$scope', '$filter', 'frontendService', '$http', 'editableOptions', 'editableThemes','notify','notification','$appConstants',
  function($scope, $filter, frontendService, $http, editableOptions, editableThemes, notify, notification, $appConstants){

    $scope.pw1 = '';
});
  

Независимо от того, что вы inject используете в контроллере, должно быть в том же порядке.
Удалите кавычки между вводимыми внутри function .

Комментарии:

1. спасибо за ответ .. не работает, выдает 2 ошибки 1) customer_signup.js: 2 Неперехваченная синтаксическая ошибка: неожиданная строка 2) angular.js: 12520 Ошибка: [ng:areq] Аргумент ‘CustSignupCtrl’ не является функцией, не определен

2. Можете ли вы обновить свой вопрос скриншотом консоли вашего браузера? Там должны быть какие-то ошибки.

3. Вы изменили порядок того, что у вас было injected раньше? В нем говорится, что в строке 2 есть ошибка .. можете ли вы проверить, пропустили ли вы запятую или кавычку или т. Д.?

4. app.controller(‘CustSignupCtrl’, [‘$scope’, ‘$filter’, ‘frontendService’, ‘$http’, ‘editableOptions’, ‘editableThemes’,’notify’,’notification’, ‘$AppConstants’, функция (‘$scope’, ‘$filter’,’frontendService’, ‘$http’,’editableOptions’, ‘editableThemes’,’notify’,’notification’,’$AppConstants’){ } ])

5. это то, что я использовал

Ответ №2:

Это может быть проблемой несоответствия зависимостей

AngularJS вводит объект в функцию так, как он видит их внутри []

Например, если вы объявляете функцию внутри своего js-файла, скажем, так

 var app = angular.module('app',[]);
app.controller('maincntrl',function($scope){

});
var search = function($scope,searchtext,searchfilters,searchareas)
{
   return 'result'
}

console.log(angular.injector.annotate(search));
  

Результат, который вы получите в своей консоли, будет

 ["$scope","searchtext","searchfilters","searchareas"]
  

AngularJS анализирует параметры функции в виде массива

Он проходит через все элементы массива и в тот момент, когда он видит "$scope" , он вводит область object действия в эту позицию

Теперь синтаксис, который вы использовали, в основном используется для минимизации

Итак, согласно вашему заявлению

 app.controller('CustSignupCtrl', ['$scope','frontendService', '$filter','frontendService', '$http', 'editableOptions', 'editableThemes','notify','notification','$appConstants',
  function('$scope', '$filter','frontendService', '$http','editableOptions', 'editableThemes','notify','notification','$appConstants'){

});
  

Итак

 $scope--> shall be injected into $scope
frontendService-->shall be injected into $filter
$filter--> shall be injected into frontendService
.
.
.
so on
  

Также ошибки (о которых вы упомянули в комментариях) возникают из-за того, что вы объявили function параметры, strings и в этом случае внедрение зависимостей не происходит. Исправление этих вещей решит вашу проблему