Angularjs 在模块之间共享常量
Angularjs Share Constant between Modules
假设我有 angularjs 个名为 core、customer 和 admin 的模块]. customer 和 admin 都包含 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"。
假设我有 angularjs 个名为 core、customer 和 admin 的模块]. customer 和 admin 都包含 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"。