假设我有名为核心,客户和管理员的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;
}
]);
})();
答案 0 :(得分:1)
每个站点都有自己的核心模块,您只在客户站点页面中定义了常量,而不是在管理站点页面上,因此常量不可用。
即使是这样,每次加载HTML页面时,前一页存储在内存中的所有内容都会消失。因此,一个站点中的代码无法与另一个站点共享内存常量。即使您留在客户站点但刷新页面,您也会丢失常量的先前值:角度应用程序将从头开始。
答案 1 :(得分:1)
除了@ JB-Nizet的回答之外,您还必须以不同的方式保留数据,例如本地存储,会话存储或cookie。无论最适合您的情况
答案 2 :(得分:1)
从我所看到的,看起来您正在将SPA嵌入到.NET项目中。如果你使用带有角度的asp.net mvc路由,那么无论何时框架加载一个视图,你的模板都会重新加载,我们的ng-app也会重新加载,因此你会像刷新页面一样丢失应用程序上的所有数据,就像JBNizet一样提及。
我能想到的解决方案是使用像localStorage或缓存服务这样的东西来保存你需要的数据&#34; memory&#34;。