【发布时间】:2015-11-13 16:39:50
【问题描述】:
当我需要定义 $rootScope 变量值时,我无法使用 controller as。
该过程包括两个主要阶段。
- 用户未登录,因此当他处理登录表单时,我将在
LoginController内的 $rootScope 上定义他的个人数据(如姓名和 ID)。 - 用户已经登录(本地存储中有数据),所以我将从本地存储中获取他的数据并在
.run上设置$rootScope值;
但问题是,由于我不熟悉这种类型的语法(使用带有 vm attr 的 'controller as'),$rootScope 没有被定义,也没有被视图访问。
这就是我正在做的:
.运行
angular
.module('agApp')
.run(runAuth);
/* @ngInject */
function runAuth($rootScope,factAuth,localStorageService) {
var user = JSON.parse(localStorageService.get("user"));
if (user.length > 0) {
$rootScope.userData = user[0];
}
$rootScope.logOut = function() {
factAuth.logOut();
$rootScope.userData = '';
$state.go('login');
};
}; //end run
控制器
angular
.module('agApp')
.controller('LoginController', LoginController);
/* @ngInject */
function LoginController($rootScope,$http,$state,localStorageService,factAutenticacao) {
var vm = this;
vm.pageName = 'Login page';
vm.loginProccess = loginProccess;
function loginProccess(event) {
//here i get an $htt to validate the login
if (!data) {
alert('login failed')
} else {
factAutenticacao.loginProcess();
localStorageService.set("user", JSON.stringify(data[0]));
$rootScope.userData = data[0];
$state.go('app');
};
};
}; //end login controller
顺便说一句,在定义全局函数时也会出现同样的问题,例如“logOut”函数。
在我看来,我正在尝试像这样访问这些数据:
<div class="col-l-12">
<h3>User: {{::vm.userData.name}}</h3>
<ul>
<li> {{::vm.userData.id}}</li>
<li> {{::vm.userData.location}}</li>
[.. more code ..]
</ul>
</div>
由于它是一个全局变量,我不想将它与特定的 controller 关联,因为它需要在整个应用程序中都可以访问。
怎么了?
【问题讨论】:
-
您是否考虑过将 userData 和 logout 函数抽象为使用 localStorageService 的单独服务?
-
我现在正在这样做。但是例如我需要显示用户数据,并且在其他场合也需要使用它的数据,例如uniqueID,例如:添加新产品,开票等。可以吗?我正在尝试将登录/身份验证构建为单独的模块。
标签: angularjs