2015-03-25 4 views
1

Так что эта проблема возникает только при перемещении фабрики во внешний файл, и я действительно смущен относительно того, почему. Извлечение директив, контроллеров и фильтров во внешние файлы не нарушает мое приложение. Я покажу, что я делаю внизу.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, и все мои контроллеры, директивы и т. Д. Отлично работают во внешних файлах ... просто не эта фабрика. Любая помощь будет оценена по достоинству.

+1

Я бы порекомендовал вам пойти со своей второй точкой и сообщить об ошибке в вашем вопросе. Говоря, что вы получаете сообщения об ошибках и не добавляете их в свой вопрос, никому не помогает. – Phil

+0

Ошибка в пункте 2 - «Ошибка: $ injector: modulerr». Не удалось создать экземпляр модуля из-за [$ injector: nomod].после выполнения этой ошибки мне нужно дважды проверить варианты написания и проверить, загружен ли модуль. Я сделал то и другое. такая же ошибка повторится. – phil3903

+0

Это примерно половина ** фактического сообщения об ошибке **. Серьезно, вам нужна помощь или нет? Я также рекомендую вам использовать неограниченную версию Angular и любых других библиотек во время разработки; сообщения об ошибках более подробные. – Phil

ответ

-1

Проблема заключается в том, что AngularJS не позволяет вам регистрировать заводы после его загрузки. Чтобы он работал, вы должны сделать следующее в своей конфигурации:

var app = angular.module('app', [...]); 
app.config(function($provide) { 
    app.factory = function(name, factory) { 
     $provide.factory(name, factory); 
    }; 
}); 
+0

Может ли кто-нибудь сказать, что случилось с этим ответом? –

Смежные вопросы