2015-11-08 38 views
0

我正在使用Angular开发一个Web应用程序。我创建了一个包含在index.html中的头文件,因此它被固定到每个页面,并且页面内容通过UI视图注入。我的问题是:如果我只想在之后显示此标头,那么用户已通过注册和登录页面,我该怎么办?从Angular中的路由器访问变量

我已经添加了一个变量到我的路由器,如下所示,但我不知道如何从index.html访问路由器的变量,因为它没有连接到控制器(因为它是跨所有页面的固定内容)。我打算简单地在index.html中抛出一个ng-hide =“hideHeader”。

app.config(function($stateProvider, $urlRouterProvider) { 

$urlRouterProvider.otherwise('/login'); 

$stateProvider 
    .state('login', { 
     url: '/login', 
     templateUrl: 'app/views/login/login.html', 
     controller: 'loginController', 
     controllerAs: 'vm', 
     hideHeader: true 
    }) 

    .state('signup', { 
     url: '/signup', 
     templateUrl: 'app/views/signup/signup.html', 
     controller: 'signupController', 
     controllerAs: 'vm', 
     hideHeader: true 
    }) 

    .state('landing', { 
     url: '/landing', 
     templateUrl: 'app/views/landing/landing.html', 
     controller: 'landingController', 
     controllerAs: 'vm', 
     hideHeader: false 
    }) 

    .state('account-management', { 
     url: '/account-management', 
     templateUrl: 'app/views/account-management/account-management.html', 
     controller: 'accountManagementController', 
     controllerAs: 'vm' 
     hideHeader: false 
    }); 
}); 

我怎样才能在index.html访问此hideHeader价值?有没有办法设置全局范围变量并从那里获取值?

+0

请注意,ng-if的重量要比ng-hide/ng-show的重量轻,所以我会尽可能使用它。另外,当将数据添加到状态时,应该使用数据参数,如文档[此处](https://github.com/angular-ui/ui-router/wiki)中所示。 – nggonzalez

回答

3

这里有一个不同的方法:专门为认证(登录/注销)和认证状态创建一个服务。然后在你的头文件中调用该服务。鉴于标题取决于您的身份验证,那么将其抽象出来是有意义的。您的登录/注册控制器将与此服务进行交互。

您的路线现在也可以调用此服务,以查看他们是否应允许用户根据登录状态查看它们。

+1

我同意这是最可重用的解决方案,如果有许多控制器将依赖于已发生的身份验证。它也将允许集中访问用户权限,数据等。 – nggonzalez

+0

这太好了,谢谢@Akshay。 –