小编Ank*_*ush的帖子

Angular 2基于角色的导航在同一路径上

我有一个关于Angular 2路由器的小问题,3.0.0-rc.1我希望根据用户角色(例如AdminComponent或UserComponent)导航到不同的主组件.任何人都可以帮助修改以下路线,以便我可以实现所需的功能吗?

{path: 'login', component: LoginComponent},  // <--- This redirects to '/' in case user is logged in
{
  path: '',
  component: HomeComponent,               
  canActivate: [AuthGuardService],  // <--- Check if user is logged in, else redirect to login
  children: [
    {
      path: '',
      component: AdminComponent  // <--- Want to navigate here if user role is 'admin'
    },
    {
      path: '',
      component: UserComponent  // <--- Want to navigate here if user role is 'user'
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

AuthGuardService.ts

import {Injectable} …
Run Code Online (Sandbox Code Playgroud)

javascript authentication angular2-routing angular

7
推荐指数
1
解决办法
3199
查看次数

Angular 2 - 再次单击routerLink时重新加载组件

我正在使用以下文件结构的Angular 2项目.

  • HeaderComponent.ts
  • AppComponent.ts
  • Page1Component.ts
  • Page2Component.ts

我在HeaderComponent.ts中有以下模板

<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">WebSiteName</a>
        </div>
        <div class="collapse navbar-collapse" id="myNavbar">
            <ul class="nav navbar-nav">
                <li class="active"><a [routerLink]="['']">Home</a></li>
                <li><a [routerLink]="['/page1']" >Page1</a></li>
                <li><a [routerLink]="['/page2']">Page2</a></li>
            </ul>
        </div>
    </div>
</nav>
Run Code Online (Sandbox Code Playgroud)

在我的AppComponent中使用以下路由

@Component({
    selector: 'my-app',
    template: ` 
            <my-header></my-header>
            <router-outlet></router-outlet>
    `,
    directives: [ROUTER_DIRECTIVES, HeaderComponent]
})
@Routes([
    {path: '/', component: HomeComponent},
    {path: '/page1', component: Page1Component}
    {path: '/page2', component: Page2Component}
])
export class …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angular2-routing angular

5
推荐指数
1
解决办法
1万
查看次数

Angular 2验证状态

我使用Angular 2实现了一个登录页面.登录后,我从服务器获取jsonwebtoken,userId,userRole,userName.我将此信息存储在localstorage中,以便我可以随时访问它并在用户刷新页面时保持登录状态.

AuthService.ts

import {Injectable} from "@angular/core";

@Injectable()
export class AuthService {
  redirectUrl: string;

  logout() {
    localStorage.clear();
  }

  isLoggedIn() {
    return localStorage.getItem('token') !== null;
  }

  isAdmin() {
    return localStorage.getItem('role') === 'admin';
  }

  isUser() {
    return localStorage.getItem('role') === 'user';
  }

}
Run Code Online (Sandbox Code Playgroud)

要检查登录状态,我只是检查localstorage中是否存在令牌.由于localstorage是可编辑的,因此只需在localstorage中添加任何令牌即可绕过登录页面.同样,如果客户端在localstorage中编辑用户角色,客户端可以轻松访问管理员或用户页面.

我该如何解决这些问题?

这更像是一般问题,我想知道网站如何保持登录状态?

PS NodeJS Server端登录代码生成jsonwebtoken

const jwt = require('jsonwebtoken');
const User = require('../models/User');

/**
 * POST /login
 * Sign in using username and password
 */
exports.postLogin = (req, res, next) => {
    User.findOne({username: req.body.username})
        .then(user=> {
            if (!user) { …
Run Code Online (Sandbox Code Playgroud)

javascript authentication local-storage node.js angular

5
推荐指数
1
解决办法
588
查看次数

用observable替换回调地狱

RxJS github repo解释了如何从事件或数组创建observable.我知道如何用异步或Promise替换回调地狱,但我找不到一个关于如何创建和返回我的函数执行异步任务的observable的示例.

例如,

x = getData();
y = getMoreData(x);
z = getMoreData(y);
...

getData(function(x){
    getMoreData(x, function(y){
        getMoreData(y, function(z){ 
            ...
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

如何用observable替换这个回调地狱?我发现我们可以在RxJS github中调用observer.next()方法- 创建observable但是无法找出这个例子的实现.

javascript callback reactive-programming rxjs

3
推荐指数
1
解决办法
2998
查看次数

取消订阅可观察的承诺

如果一个observable转换为promise,我如何取消订阅?我在Angular 2中使用RxJS

import 'rxjs/add/operator/toPromise';

return this.http.get(this.heroesUrl)
                  .toPromise()
                  .then(this.extractData)
Run Code Online (Sandbox Code Playgroud)

reactive-programming rxjs angular

3
推荐指数
1
解决办法
2784
查看次数

在java中迭代2个列表

List<String> listA = new Arraylist();
List<String> listB = new Arraylist();
Run Code Online (Sandbox Code Playgroud)

鉴于以上2个列表,我想迭代并在每个元素上调用相同的方法.

选项1

for(String aStr: listA){
    someCommonMethodToCall(aStr);
    someCommonMethodToCall(aStr);
    ...
}
for(String bStr: listB){
    someCommonMethodToCall(bStr);
    someCommonMethodToCall(bStr);
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

选项2

List<String> mergedList = new ArrayList();
mergedList.addAll(listA);
mergedList.addAll(listB);

for(String elem: mergedList){
    someCommonMethodToCall(elem);
    someCommonMethodToCall(elem);
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

选项3

我认为选项1应该是最好的.是否有一些Java 8 lambda方法可以做到这一点?此外,性能方面,还有什么比选项1更好?

java loops java-8

2
推荐指数
2
解决办法
2720
查看次数