2014-05-06 2 views
0

Я определил 2 угловых фабрики в файлах fact1.js и fact2.jsDECLARE угловых заводов, находящихся в разных файлах

fact1.js:

angular.module('myapp').factory('fact1', function ($rootScope) { 
return $rootScope.userid; 
}); 

fact2.js:

angular.module('myapp').factory('fact2', function ($rootScope) { 
return $rootScope.role; 
}); 

app.js имеет:

angular.module('myapp', [ 
'ngCookies', 
'ngResource', 
'ngSanitize', 
'ngRoute' 
]) 
.config(function ($routeProvider, $locationProvider, $httpProvider) { 
// config and run methods 

Al л они находятся в разных файлах JS, и я загружать их в index.html как:

<body ng-app="myapp"> 
<!-- code to load angular components --> 

<script src="scripts/app.js"></script> 
<script src="scripts/services/fact1.js"></script> 
<script src="scripts/services/fact2.js"></script> 
<!-- Load other components --> 

заводы остаются неопределенными. Я видел пару примеров на how to declare a factory при объявлении самого модуля, но как я могу объявить их, когда они находятся в разных файлах?

EDIT: код mycontroller.js, который впрыскивает и использует эти заводы:

angular.module('myapp').controller('mycontroller', function (fact1,fact2) { 
console.log("UserID is:" + fact1); 
console.log("UserRole is:" + fact2); 
}); 
+0

Вы случайно дали фабрикам одно и то же имя ... И не могли бы вы объяснить «неопределенные»?Вы получаете ошибку, когда вводите свои фабрики, или VALUE просто не определено? – Hylianpuffball

+0

Итак, когда я ввожу эти фабрики в контроллеры и использую его, я получаю сообщение об ошибке, в котором говорится, что он не может считать свойство «неопределенным». Я отредактирую вопрос, чтобы поставить код для инъекций и его использование. – pbd

+0

@pbd [Вот рабочая версия на CodePen] (http://codepen.io/rossmartin/pen/AqrKw). Надеюсь, это поможет! – Ross

ответ

1

Проблема в том, что вы объявляете отдельные модули, которые вы загружаете, в качестве одного и того же имени модуля «myapp».

Попробуйте делать следующее в ваших заводских файлах, если вы хотите, чтобы держать их отдельно:

angular.module('myapp.factory1').factory('fact1', function ($rootScope) { 
    return $rootScope.userid; 
}); 

angular.module('myapp.factory2').factory('fact2', function ($rootScope) { 
    return $rootScope.role; 
}); 

Тогда сделайте это в вашем app.js или центральный файл:

angular.module('myapp', [ 
'myapp.factory1', 
'myapp.factory2', 
    ... 
'ngSanitize', 
'ngRoute' 
]) 

Это должно сделать Хитрость. Проблема в том, что ваши заводы не объявляются как зависимости правильно.

+1

@Iyyons: Это сработало. Благодаря! – pbd

+1

Этот ответ не решает проблему, поскольку она представлена ​​в вопросе в настоящее время - OP не загружает фабрики в отдельные модули и не определяет их как таковые. В то время как я рад, что они разработали решение, я игнорирую вопрос, потому что он не имеет ценности для других. –

0

Вам нужно впрыскивать $rootScope DEPENDENCY

angular.module('myapp').factory('fact1', ['$rootScope', function ($rootScope) { 
    return $rootScope.userid; 
}]); 
0

Я думаю, что проблема не из-за различных файлов , Заводское определение выглядит правильно. Но это не очевидно из вашего кода, где вы присваиваете значения $ rootScope.role и $ rootScope.userid. Вы можете получить неопределенные значения для фабрик, если $ rootScope.role и $ rootScope.userid не установлены. Или вы имеете в виду, что инжектор не смог его решить?

Edit: есть упрощенная версия кода http://jsfiddle.net/hUhpB/1/

angular.module('myapp', []).run(function($rootScope){ 
    $rootScope.userid = 3; 
}); 

angular.module('myapp').factory('fact1', function ($rootScope) { 
    return $rootScope.userid; 
}); 

angular.module('myapp').controller('TestCtrl', function(fact1){ 
    alert(fact1); 
}); 

Он работает, как ожидалось, перемещаясь код внешних файлов не имеет никакого значения.

+0

Извините, я должен был прояснить ситуацию. Я устанавливаю значения $ rootScope в методе module.run(). Таким образом, они назначаются, когда загружается «myapp». – pbd

0

Основываясь на том, что вы опубликовали, проблема не в использовании отдельных файлов. На самом деле, трудно сказать, в чем проблема основана на информации, представленной кодом &. Но this Plunker работает, и он очень внимательно следит за тем, как вы структурировали код, размещенный в вашем вопросе.

Мое предложение - взглянуть на него вместе с вашим фактическим кодом разработки и сравнить эти два, чтобы увидеть, где может быть проблема. Бьюсь об заклад, это в каком-то коде, который вы либо не размещали здесь, либо не указали.

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