#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
и в этом случае внедрение зависимостей не происходит. Исправление этих вещей решит вашу проблему