Angularjs在模块之间共享常量

时间:2015-03-13 20:12:45

标签: angularjs angularjs-module

假设我有名为核心客户管理员的angularjs模块。 客户管理员都包含核心。我希望两个模块的站点使用相同的头,它有一个控制器(HeaderController)。当用户登录到客户模块支持的站点时,我会在核心模块上创建一个包含用户信息的常量。无论我走进客户模块,该常量都包含我放在那里的数据。有一个链接可以访问支持 admin 模块的网站,我希望能够使用 admin (在HeaderController上)的用户信息访问该常量。您可以在下面找到我的代码片段。现在客户上的所有内容都有效,但当我去 admin 时,我会得到以下内容:

错误:[$ injector:unpr]未知提供者:currentUserProvider< - currentUser< - HeaderController

客户

Index.cshtml

@{
ViewBag.Title = "Customer";
Layout = "~/Areas/Institutional/Views/Customer/_SiteLayout.cshtml";
}
<br />
<div>
    <ng-view></ng-view>
</div>


@section Scripts {
<script type="text/javascript">
    angular.module('core').constant('currentUser', @Html.Raw(Json.Encode(Model.Data)));
</script>
}

admin

的模块
(function () {
'use strict';

angular
    .module('admin',
        ['core']);

})();

客户

的模块
(function () {
'use strict';

angular
    .module('customer',
        ['core']);

})();

我需要访问 currentUser (常量)的控制器

(function() {
    angular
        .module('core')
        .controller('HeaderController', ['$scope', '$rootScope','currentUser',
        function ($scope, $rootScope, currentUser) {
            $scope.currentUser = currentUser;  
        }
    ]);
})();

3 个答案:

答案 0 :(得分:1)

每个站点都有自己的核心模块,您只在客户站点页面中定义了常量,而不是在管理站点页面上,因此常量不可用。

即使是这样,每次加载HTML页面时,前一页存储在内存中的所有内容都会消失。因此,一个站点中的代码无法与另一个站点共享内存常量。即使您留在客户站点但刷新页面,您也会丢失常量的先前值:角度应用程序将从头开始。

答案 1 :(得分:1)

除了@ JB-Nizet的回答之外,您还必须以不同的方式保留数据,例如本地存储,会话存储或cookie。无论最适合您的情况

答案 2 :(得分:1)

从我所看到的,看起来您正在将SPA嵌入到.NET项目中。如果你使用带有角度的asp.net mvc路由,那么无论何时框架加载一个视图,你的模板都会重新加载,我们的ng-app也会重新加载,因此你会像刷新页面一样丢失应用程序上的所有数据,就像JBNizet一样提及。

我能想到的解决方案是使用像localStorage或缓存服务这样的东西来保存你需要的数据&#34; memory&#34;。