最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - AngularJS: Share factory between multiple modules - Stack Overflow

programmeradmin0浏览0评论

Let's say I have a module called App which injects two other modules called factories and controllers:

var app = angular.module("app", ["factories", "controllers", "directives"])
.run(function ($rootScope, userFactory) {
    userFactory.property = "someKickstartValue";
});

The factories module holds all factories:

var factories = angular.module("factories", []),
factory = factories.factory("testFactory", {
     property: "someValue"
});

And the controllers module holds all controllers:

var controllers = angular.module("controllers", ["factories"]),
controller = controllers.controller("controller", function ($scope, testFactory) {
    console.log(testFactory.property); // Returns "Some Value" and not 
                                       // "someKickstartValue" as expected.
});

The actual Question:

Why does the "someKickstartValue" not apply to the controllers? As far as I do understand the module app has it's own testFactory instance and the module controllers has it's own as well, so there can't be any information shared between modules via factories. Is there a way around, or have I made a mistake?

Let's say I have a module called App which injects two other modules called factories and controllers:

var app = angular.module("app", ["factories", "controllers", "directives"])
.run(function ($rootScope, userFactory) {
    userFactory.property = "someKickstartValue";
});

The factories module holds all factories:

var factories = angular.module("factories", []),
factory = factories.factory("testFactory", {
     property: "someValue"
});

And the controllers module holds all controllers:

var controllers = angular.module("controllers", ["factories"]),
controller = controllers.controller("controller", function ($scope, testFactory) {
    console.log(testFactory.property); // Returns "Some Value" and not 
                                       // "someKickstartValue" as expected.
});

The actual Question:

Why does the "someKickstartValue" not apply to the controllers? As far as I do understand the module app has it's own testFactory instance and the module controllers has it's own as well, so there can't be any information shared between modules via factories. Is there a way around, or have I made a mistake?

Share Improve this question edited Oct 15, 2017 at 20:40 tmuecksch asked Feb 6, 2014 at 9:35 tmueckschtmuecksch 6,6527 gold badges44 silver badges61 bronze badges 2
  • In the first line, starting var app you have mis-spelled "factories" – Mawg Commented Oct 15, 2017 at 14:57
  • @Mawg Thanks. I changed it. Should be correct now :) – tmuecksch Commented Oct 15, 2017 at 20:40
Add a ment  | 

2 Answers 2

Reset to default 6

I fixed it by removing the "factories" dependency of the controller.

var controllers = angular.module("controllers", []),
controller = controllers.controller("controller", function ($scope, testFactory) {
    console.log(testFactory.property); // Returns "someKickstartValue" as expected
});

Because I now do not declare factories as dependency, the controllers module doesn't create it's own instance of factories and has access to the instance of the app module which injects the controllers module.

I faced the same problem. I solved it in the following way:

// modules.js
(function (angular) {
    angular.module("shared", []);
    angular.module("user", ["shared"]);
    angular.module("admin", ["shared"]);
})(window.angular);

Such structure allows to use factories, services, directives attached to the shared module in other modules.

发布评论

评论列表(0)

  1. 暂无评论