Я пытаюсь "настроить" пример mongolab под мой собственный REST API. Теперь я сталкиваюсь с этой ошибкой, и я не уверен, что я делаю неправильно:
Error: Unknown provider: ProductProvider <- Product
at Error (unknown source)
at http://localhost:3000/js/vendor/angular.min.js:28:395
at Object.c [as get] (http://localhost:3000/js/vendor/angular.min.js:26:180)
at http://localhost:3000/js/vendor/angular.min.js:28:476
at c (http://localhost:3000/js/vendor/angular.min.js:26:180)
at d (http://localhost:3000/js/vendor/angular.min.js:26:314)
Это мой контроллер:
function ProductListCtrl($scope, Product) {
$scope.products = Product.query();
}
и это модуль:
angular.module('productServices', ['ngResource']).
factory('Product', ['$resource', function($resource){
var Product = $resource('/api/products/:id', { }, {
update: { method: 'PUT' }
});
return Product;
}]);
Ответы:
Ваш код выглядит хорошо, фактически он работает (кроме самих вызовов), когда копируется и вставляется в пример jsFiddle: http://jsfiddle.net/VGaWD/
Трудно сказать, что происходит, не видя более полного примера, но я надеюсь, что приведенный выше jsFiddle будет полезен. Я подозреваю, что вы не инициализируете свое приложение с помощью модуля «productServices» . Это даст ту же ошибку, мы можем увидеть это в другом jsFiddle: http://jsfiddle.net/a69nX/1/
Если вы планируете работать с AngularJS и MongoLab, я бы предложил использовать существующий адаптер для $ resource и MongoLab : https://github.com/pkozlowski-opensource/angularjs-mongolab. Это облегчает большую часть работы с MongoLab. можете увидеть это в действии здесь: http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ Отказ от ответственности! Я поддерживаю этот адаптер (написан на основе примеров AngularJS), поэтому я явно предвзят.
источник
<body ng-app="productServices">
а у другого есть<body ng-app="">
.Fiddle Options
вкладкой справаЯ получил эту ошибку, потому что передавал неверный параметр в определение фабрики. Я имел:
Это сработало, когда я удалил
$scope
и изменил определение фабрики на:Если вам нужно ввести
$scope
, используйте:источник
У меня просто была похожая проблема. Ошибка сказала то же самое в вопросе, попытался решить ее с помощью ответов pkozlowski.opensource и Ben G, которые оба являются правильными и хорошими ответами.
Моя проблема действительно отличалась с той же ошибкой:
в моем HTML-коде у меня была такая инициализация ...
Чуть дальше я попытался сделать что-то вроде этого:
Я избавился от первого ... потом это сработало ... очевидно, вы не можете инициализировать ng-app дважды или более раз. справедливо.
Я полностью забыл о первом "ng-app" и полностью разочаровался. Может быть, это поможет кому-то в один день ...
источник
Убедитесь, что ваш основной
app.js
включает в себя услуги, от которых он зависит. Например:источник
productServices
должен быть модуль, поэтому не имеет значения, что находится внутри такого модуля (сервис или нет).Ответ Пкозловского верен, но на случай, если это случится с кем-то другим, у меня возникла та же ошибка после создания одного и того же модуля дважды по ошибке; второе определение переопределяло поставщика первого:
Я создал модуль, выполнив
затем немного дальше в том же файле:
Правильный способ сделать это:
источник
В моем случае я определил нового поставщика, скажем,
xyz
Когда вы настраивали вышеуказанного провайдера, вы должны добавить его с
Provider
добавленной строкой ->xyz
становитсяxyzProvider
.Пример:
Если вы введете вышеуказанного провайдера без строки «Провайдер», вы получите аналогичную ошибку в OP.
источник
В конце файла JS закрыть заводскую функцию у меня было
});
вместо того
}());
источник
})();
Это заняло у меня слишком много времени, чтобы выследить. Убедитесь, что вы минизащитите свой контроллер в пределах своей директивы.
надеюсь, это поможет
источник
Чтобы добавить сюда свой собственный опыт, я пытался внедрить службу в одну из функций конфигурации моего модуля. Этот параграф из документов, которые я в конце концов нашел, объясняет, почему это не работает:
Это означает, что вы можете внедрить провайдеров в функции module.config (...), но вы не можете внедрить сервисы, для этого вам нужно подождать, пока module.run (...), или выставить провайдера, которого вы можете внедрить в модуль. конфиг
источник
Для меня эта ошибка была вызвана запуском уменьшенной версии моего углового приложения. Угловые документы предлагают способ обойти это. Вот соответствующая цитата, описывающая проблему, и вы можете найти предлагаемое решение в самих документах здесь :
источник
Так как это лучший результат для "неизвестного поставщика angularjs" в Google прямо сейчас, вот еще одна ошибка. Выполняя модульное тестирование с Jasmine, убедитесь, что в вашей
beforeEach()
функции есть следующее утверждение :В противном случае вы получите ту же ошибку в ваших тестах.
источник
Еще один случай, когда эта ошибка произойдет, если ваша служба определена в отдельном файле javascript, убедитесь, что вы ссылаетесь на нее! Да, я знаю, ошибка новичка.
источник
Я забыл ввести файл, содержащий мои услуги вообще. Не забудьте сделать это при инициализации модуля приложения:
источник
В моем случае я использовал анонимную функцию в качестве оболочки для углового модуля, например:
После закрытия скобок я забыл вызвать анонимную функцию, открыв и закрыв скобки снова, как указано выше.
источник
Для меня проблема была в ленивой загрузке; Я загрузил свой контроллер и сервис поздно, поэтому они не были доступны при загрузке страницы (и угловой инициализации). Я сделал это с помощью тега UI-If, но это не имеет значения. Решением было загрузить сервис с уже загруженной страницей.
источник
Вот еще один возможный сценарий, где вы можете увидеть эту ошибку:
Если вы используете Sublime Text 2 и угловой плагин, он будет генерировать заглушки, как это
обратите внимание на пустой '' как первый элемент массива после строки 'utilFactory'. Если у вас нет никаких зависимостей, удалите это так:
источник
Поскольку этот вопрос является лучшим результатом Google, я добавлю еще одну возможную вещь в список.
Если в используемом модуле произошел сбой в оболочке внедрения зависимостей, он даст такой же результат. Например, модули копирования и вставки из Интернета могут полагаться на underscore.js и пытаться добавить «_» в оболочку di. Если в поставщиках зависимостей вашего проекта нет подчеркивания, когда ваш контроллер попытается обратиться к фабрике вашего модуля, он получит «неизвестного поставщика» для вашей фабрики в журнале консоли браузера.
источник
Проблема для меня заключалась в том, что я создал несколько новых файлов javascript, которые ссылались на сервис, но Chrome видел только старую версию. CTRL + F5 исправил это для меня.
источник
Я получил ошибку «неизвестный поставщик», связанную с angular-mocks (ngMockE2E) при компиляции моего проекта с Grunt. Проблема была в том, что angular-mocks нельзя минимизировать, поэтому мне пришлось удалить его из списка минимизированных файлов.
источник
После обработки с этой ошибкой, я могу поддержать этот список ответов с моим собственным делом.
В то же время это просто и глупо (возможно, не глупо для начинающих, как я, но да для экспертов), ссылка на скрипт на angular.min.js должна быть первой в вашем списке скриптов на html-странице.
Это работает:
Это не:
Обратите внимание на angular.min.js.
Надеюсь, это кому-нибудь поможет !! :)
источник
Моя проблема была с Йоманом, используя (с большой буквы):
Сделанные файлы (некапитализированные):
но файл index.html включен (с большой буквы):
Надеюсь, это кому-нибудь поможет.
источник
Еще одна возможность.
У меня было
unknown Provider <- <- nameOfMyService
. Ошибка была вызвана следующим синтаксисом:Angular искал
''
зависимость.источник
Мой сценарий может быть немного неясным, но он может вызвать ту же ошибку, и кто-то может испытать ее, поэтому:
При использовании службы $ controller для создания экземпляра нового контроллера (который ожидал '$ scope' в качестве первого введенного аргумента) я передавал локальную область действия нового контроллера во второй параметр функции $ controller (). Это привело к тому, что Angular попытался вызвать службу $ scope, которая не существует ( хотя некоторое время я действительно думал, что каким-то образом удалил службу $ scope из кеша Angular ). Решение состоит в том, чтобы обернуть локальную область видимости в объект localals:
источник
Ни один из приведенных выше ответов для меня не сработал, возможно, я поступил совершенно неправильно, но мы, как новичок, делаем то же самое.
Я инициализировал контроллер
div
в, чтобы получить список:А затем использовать
$routeProvider
для сопоставления URL на тот же контроллер. Как только я убралng-init
контроллер работал с маршрутом.источник
У меня была такая же проблема. Я исправил это, используя
$('body').attr("ng-app", 'MyApp')
вместо<body ng-app="MyApp">
boostrap.Потому что я сделал
для архитектурных требований.
источник
В своем приложении Ruby on Rails я сделал следующее:
Это было сделано в среде разработки, которая уменьшила Angular.js и включила его в
/public/assets/application.js
файл.Удаление
/public/assets/*
файлов решило проблему для меня.источник
Я столкнулся с подобной проблемой сегодня, и проблемы были действительно очень маленькими
Если вы наблюдаете вышеупомянутый блок, в первой строке вы увидите, что я ввел $ scope по ошибке, что неверно. Я удалил эту нежелательную зависимость, чтобы решить проблему.
источник
У меня была эта ошибка после того, как я создал новую фабрику и использовал ее в компоненте, но я не проверял спецификации этих компонентов
источник
Еще одно замечание: я получаю эту ошибку, вводя $ timeout, и потребовалось несколько минут, чтобы понять, что у меня есть пробелы в значениях массива. Это не будет работать:
Публикация на случай, если у кого-то еще есть глупая ошибка, подобная этой.
источник
Мой случай был изворотливым
функция имеет «с»!
источник