最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Angular 2 landing page - Stack Overflow

programmeradmin0浏览0评论

I am taking my first steps with Angular 2 and angular in general, and I am wondering how to setup a landing page.

My goal is to show a landingpage everytime the user does not have a token in local storage or in a cookie.

My appponent.ts looks like this

import {Component} from 'angular2/core';
import {ROUTER_DIRECTIVES, RouteConfig} from 'angular2/router';
import {NavbarComponent} from './navbarponent';
import {LoaderComponent} from './loaderponent';
import {NameListService} from '../shared/index';
import {HomeComponent} from '../+home/index';
import {AboutComponent} from '../+about/index';

@Component({
  selector: 'g-app',
  viewProviders: [NameListService],
  templateUrl: 'app/ponents/appponent.html',
  directives: [ROUTER_DIRECTIVES, NavbarComponent, LoaderComponent]
})
@RouteConfig([
  {
    path: '/',
    name: 'Home',
    ponent: HomeComponent
  },
  {
    path: '/about',
    name: 'About',
    ponent: AboutComponent
  }
])
export class AppComponent {

}

/home and /about are also ponents if I understand correctly. Now I would like to have a seperate page that doesn't have access to the navbar. Which is what the user will always land on if he isn't logged in.

Would be awesome if someone could help me start out or atleast point me in a good direction, maybe point me to a good angular 2 tutorial.

This is the boilerplate I am basing my app on

I am taking my first steps with Angular 2 and angular in general, and I am wondering how to setup a landing page.

My goal is to show a landingpage everytime the user does not have a token in local storage or in a cookie.

My app.ponent.ts looks like this

import {Component} from 'angular2/core';
import {ROUTER_DIRECTIVES, RouteConfig} from 'angular2/router';
import {NavbarComponent} from './navbar.ponent';
import {LoaderComponent} from './loader.ponent';
import {NameListService} from '../shared/index';
import {HomeComponent} from '../+home/index';
import {AboutComponent} from '../+about/index';

@Component({
  selector: 'g-app',
  viewProviders: [NameListService],
  templateUrl: 'app/ponents/app.ponent.html',
  directives: [ROUTER_DIRECTIVES, NavbarComponent, LoaderComponent]
})
@RouteConfig([
  {
    path: '/',
    name: 'Home',
    ponent: HomeComponent
  },
  {
    path: '/about',
    name: 'About',
    ponent: AboutComponent
  }
])
export class AppComponent {

}

/home and /about are also ponents if I understand correctly. Now I would like to have a seperate page that doesn't have access to the navbar. Which is what the user will always land on if he isn't logged in.

Would be awesome if someone could help me start out or atleast point me in a good direction, maybe point me to a good angular 2 tutorial.

This is the boilerplate I am basing my app on https://github./mgechev/angular2-seed

Share edited May 2, 2016 at 11:50 Dinistro 5,7301 gold badge32 silver badges39 bronze badges asked May 2, 2016 at 11:01 gempirgempir 1,9115 gold badges23 silver badges46 bronze badges 1
  • would be probably better to do a plunker – thegio Commented May 2, 2016 at 11:02
Add a ment  | 

2 Answers 2

Reset to default 3

You can override the router-outlet and check on activation, if the token is present. Something like this:

import {Directive, Attribute, ElementRef, DynamicComponentLoader} from 'angular2/core';
import {Router, RouterOutlet, ComponentInstruction} from 'angular2/router';

@Directive({
    selector: 'router-outlet'
})
export class LoggedInRouterOutlet extends RouterOutlet {
    publicRoutes: any;
    private parentRouter: Router;

    constructor(_elementRef: ElementRef, _loader: DynamicComponentLoader,
                _parentRouter: Router, @Attribute('name') nameAttr: string) {
        super(_elementRef, _loader, _parentRouter, nameAttr);

        this.parentRouter = _parentRouter;

    }

    activate(instruction: ComponentInstruction) {
        if (!hasToken()) {
            this.parentRouter.navigateByUrl('/login');
        }
        return super.activate(instruction);
    }
}

Adapted from here: https://github./auth0-blog/angular2-authentication-sample/blob/master/src/app/LoggedInOutlet.ts


This can be extended to be able to work with roles and other access controlls.

You can just redirect to a specific route on load when the token is not available.

export class AppComponent {
  constructor(private router:Router) {
    if(!hasToken()) {
      router.navigate(['/LoginForm']);
    }
  }
}

Alternatively you can create a custom RouterOutlet that checks for each route if it is allowed for the user to navigate to that route like explained in http://www.captaincodeman./2016/03/31/angular2-route-security/

发布评论

评论列表(0)

  1. 暂无评论