Angularjs 在模块之间共享常量

Angularjs Share Constant between Modules

假设我有 angularjs 个名为 corecustomeradmin 的模块]. customeradmin 都包含 core。我希望两个模块的站点都使用相同的 header,它有一个控制器 (HeaderController)。当用户登录到由 customer 模块支持的站点时,我在 core 模块上创建了一个包含用户信息的常量。无论我在 customer 模块中走到哪里,那个常量都有我放在那里的数据。有一个 link 可以转到支持 admin 模块的站点,我希望能够使用来自 admin[=46] 的用户信息访问该常量=](在 HeaderController 上)。您将在下面找到我的代码片段。现在 customer 上的所有内容都有效,但是当我转到 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>
}

管理员模块

(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;  
        }
    ]);
})();

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

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

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

据我所知,您似乎是在将 SPA 嵌入到 .NET 项目中。如果您使用 asp.net mvc 路由和 angular 一个副作用是每当框架加载视图时,您的模板会重新加载,我们的 ng-app 也会重新加载,因此您会丢失应用程序上的所有数据,就像您希望的那样如 JBNizet 所述,使用页面刷新。

我能想到的解决方案是使用 localStorage 或缓存服务之类的东西来将您需要的数据保存在 "memory"。