Так что эта проблема возникает только при перемещении фабрики во внешний файл, и я действительно смущен относительно того, почему. Извлечение директив, контроллеров и фильтров во внешние файлы не нарушает мое приложение. Я покажу, что я делаю внизу.Angularjs - фабрика не работает во внешнем файле
Я создаю свой app.js, назову модуль, вставляю различные зависимости, продолжаю с моей конфигурацией и создаю свою фабрику.
---- app.js -----
angular
.module('myApp', [
'ngAnimate',
'ngCookies',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch',])
.config(function ($routeProvider, $locationProvider, $httpProvider) { ... })
.factory('myFactory', function($http){ ... });
// also works with .factory('myFactory', ['$http', function($http) { ... }]);
У меня нет проблем с доступом к моей фабрике в моем контроллере таким образом.
---- controller.js ------
angular.module('myApp')
.controller('myController', function(myFactory){
myFactory.method() // works just fine
});
В качестве альтернативы:
---- controller.js ------
angular.module('myApp')
.controller('myController', [ 'myFactory', function(myFactory){
myFactory.method() // also works just fine
}]);
Не уверен, какой синтаксис является «правильным», но я стараюсь как всегда, и они оба работают нормально.
... Теперь, если я удаляю .factory из app.js и перемещаю его в myFactory.js (который связан в index.html), то проблема возникает.
----- myFactory.js -----
angular.module('myApp')
.factory('myFactory', function($http) { ... }); // also attempted with [ ] syntax
Приложение теперь не может загрузить после обновления, и я получаю ошибку pnpr.
Я попытался:
Удаление $ HTTP с завода, а также отгрузкой с завода пустым, чтобы убедиться, что я не возвращался плохой код внутри завода. angular.module
меняющегося myFactory.js прочтение
angular.module('myFactory', []); angular.module('myFactory').factory('api', [ '$http', function($http){ ... });
затем в app.js инъекций 'myFactory' как зависимость ... Я получаю некоторую другую ошибку все вместе:
Uncaught Error: [$injector:modulerr] Failed to instantiate module crema.app due to: Error: [$injector:modulerr] Failed to instantiate module myFactory due to: Error: [$injector:nomod] Module 'myFactory' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. errors.angularjs.org/1.3.15/$injector/nomod?p0=myFactory
Загрузка myFactory.js 1-й, 2-й, 9-й, последний ... в index.html, возможно, может потребоваться порядок загрузки? Это не так.
И различные другие незначительные синтаксические изменения. Кажется, что ничто не помогает, или меняет мою ошибку.
Не совсем уверен, что еще попробовать. Как я уже сказал, фабрика функционирует так, как предполагалось, когда внутри app.js, и все мои контроллеры, директивы и т. Д. Отлично работают во внешних файлах ... просто не эта фабрика. Любая помощь будет оценена по достоинству.
Я бы порекомендовал вам пойти со своей второй точкой и сообщить об ошибке в вашем вопросе. Говоря, что вы получаете сообщения об ошибках и не добавляете их в свой вопрос, никому не помогает. – Phil
Ошибка в пункте 2 - «Ошибка: $ injector: modulerr». Не удалось создать экземпляр модуля из-за [$ injector: nomod].после выполнения этой ошибки мне нужно дважды проверить варианты написания и проверить, загружен ли модуль. Я сделал то и другое. такая же ошибка повторится. – phil3903
Это примерно половина ** фактического сообщения об ошибке **. Серьезно, вам нужна помощь или нет? Я также рекомендую вам использовать неограниченную версию Angular и любых других библиотек во время разработки; сообщения об ошибках более подробные. – Phil