angular 6 tip 01
angular 로그인후 페이지 이동
모든 페이지에서 로그인으로 이동을 하게 되면 이동전 url 을 local storage 에 저장해둔다.
기존 코드
import { Injectable } from "@angular/core";
import { CanActivate, Router } from "@angular/router";
import { OpenIdConnectService } from "./open-id-connect.service";
@Injectable()
export class RequireAuthenticatedUserRouteGuard implements CanActivate {
constructor(private openIdConnectService: OpenIdConnectService, private router: Router) {}
canActivate() {
if (this.openIdConnectService.userAvailable) {
return true;
} else {
// trigger signin
this.openIdConnectService.triggerSignIn();
return false;
}
}
}
변경후
canActivate(route, state: RouterStateSnapshot) {
if (this.openIdConnectService.userAvailable) {
return true;
} else {
//save previous url
let returnUrl = state.url;
localStorage.setItem("returnUrl", returnUrl);
// trigger signin
this.openIdConnectService.triggerSignIn();
return false;
}
}
RouterStateSnapshot 을 이용해서 바로전 url 을 읽어오는것이 포인트
이제 로그인후 이걸 읽어서 리다이렉트해주면된다.
constructor(){...}
handleCallback() {
this.userManager.signinRedirectCallback().then(function (user) {
if (!environment.production) {
console.log('Callback after signin handled.', user);
}
});
}
constructor(private router: Router){...}
handleCallback() {
this.userManager.signinRedirectCallback().then(user => { //function (user)면 에러남 꼭 => { 로 해야함.
if (!environment.production) {
console.log("Callback after signin handled.", user);
}
let returnUrl = localStorage.getItem("returnUrl");
console.log("returnUrl#####", returnUrl);
this.router.navigateByUrl(returnUrl);
});
}
ctrl + enter 치면 서브밋하기
<post-form-content-editor (keydown.enter)="ctrlEnterPress()"></post-form-content-editor> //enter에서 동작
<post-form-content-editor (keydown.control.enter)="ctrlEnterPress()"></post-form-content-editor> //control enter 동시에 치면 동작
ctrlEnterPress() {
this.submit();
console.log("ctrl enter");
}
개선하자. ctrlEnterPress 가 구지 필요없다. 바로 호출하면 ctrlEnterPress를 삭제가능하다.
<post-form-content-editor (keydown.control.enter)="submit()"></post-form-content-editor> //control enter 동시에 치면 동작