λ€λΉκ²μ΄μ κ°λλ?
λ€λΉκ²μ΄μ κ°λ(navigation guard)λ λ·° λΌμ°ν°λ‘ νΉμ URLμ μ κ·Όν λ ν΄λΉ URLμ μ κ·Όμ λ§λ λ°©λ²μ λ§ν©λλ€. μλ₯Ό λ€μ΄, μ¬μ©μμ μΈμ¦ μ λ³΄κ° μμΌλ©΄ νΉμ νμ΄μ§μ μ κ·Όνμ§ λͺ»νκ² ν λ μ¬μ©νλ κΈ°μ μ λλ€.
λ€λΉκ²μ΄μ κ°λμ μ’ λ₯
λ€λΉκ²μ΄μ κ°λμ μ’ λ₯λ μλμ κ°μ΄ 3κ°μ§κ° μμ΅λλ€.
- μ ν리μΌμ΄μ μ μμμ λμνλ μ μ κ°λ
- νΉμ URLμμλ§ λμνλ λΌμ°ν° κ°λ
- λΌμ°ν° μ»΄ν¬λνΈ μμ μ μνλ μ»΄ν¬λνΈ κ°λ
μ μ κ°λ
μ μ κ°λλ λΌμ°ν° μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ°μ²΄λ‘ μ€μ ν μ μμ΅λλ€. κ·Έλ¬λ©΄ μ μ κ°λ μ€μ λ°©λ²μ μμλ³΄κ² μ΅λλ€.
λ¨Όμ , μ μ κ°λ μ€μ μ μν΄ λ¨Όμ μλμ κ°μ΄ λΌμ°ν° μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
var router = new VueRouter();
λ€μμΌλ‘ router
λ³μμ μλμ κ°μ΄ .beforeEach()
APIλ₯Ό νΈμΆν©λλ€.
router.beforeEach(function (to, from, next) {
// to : μ΄λν url
// from : νμ¬ url
// next : toμμ μ§μ ν urlλ‘ μ΄λνκΈ° μν΄ κΌ νΈμΆν΄μΌ νλ ν¨μ
});
μ¬κΈ°μ beforeEach()
λ₯Ό νΈμΆνλ©΄ λ€μκ³Ό κ°μ΄ 3κ°μ μΈμλ₯Ό λ°μ΅λλ€.
- to : μ΄λν url μ λ³΄κ° λ΄κΈ΄ λΌμ°ν° κ°μ²΄
- from : νμ¬ url μ λ³΄κ° λ΄κΈ΄ λΌμ°ν° κ°μ²΄
- next : toμμ μ§μ ν urlλ‘ μ΄λνκΈ° μν΄ κΌ νΈμΆν΄μΌ νλ ν¨μ
router.beforeEach()
λ₯Ό νΈμΆνκ³ λλ©΄ λͺ¨λ λΌμ°ν
μ΄ λκΈ° μνκ° λ©λλ€.
μλ urlμ΄ λ³κ²½λκ³ λλ©΄ ν΄λΉ urlμ λ°λΌ νλ©΄μ΄ μμ°μ€λ½κ² μ νλμ΄μΌ νλλ°
μ μ κ°λλ₯Ό μ€μ νκΈ° λλ¬Έμ νλ©΄μ΄ μ νλμ§ μμ΅λλ€. μ¬κΈ°μ ν΄λΉ urlλ‘ λΌμ°ν
νκΈ° μν΄μλ next()λ₯Ό νΈμΆν΄μ€μΌ ν©λλ€.
next()κ° νΈμΆλκΈ° μ κΉμ§ νλ©΄μ΄ μ νλμ§ μμ΅λλ€.
μ μ κ°λ λμ μμ
μμμ μ€λͺ ν μ μ κ°λμ λμ λ°©μμ μ΄ν΄νκΈ° μν΄ μλμ κ°μ λΌμ°ν° μ½λλ₯Ό μ€λΉνμμ΅λλ€.
// λΌμ°ν° μ»΄ν¬λνΈ
var Login = { template: '<p>Login Component</p>' };
var Home = { template: '<p>Home Component</p>' };
// λΌμ°ν
μ 보
var router = new VueRouter({
routes: [
{ path: '/login', component: Login },
{ path: '/home', component: Home }
]
});
μ 체 μ€ν μ½λ νμΈ - jsfiddle
μ μ½λμ μ€ν κ²°κ³Όλ μλμ κ°μ΅λλ€.

μ¬κΈ°μ μ μ κ°λλ₯Ό μ€μ νλ μ½λλ₯Ό μλμ κ°μ΄ μΆκ°ν©λλ€.
router.beforeEach(function (to, from, next) {
console.log('every single routing is pending');
});
μ΄μ β/loginβμ΄λ β/homeβμΌλ‘ μ΄λνλλΌλ λΌμ°ν μ΄ λμ§ μκ³ μλμ κ°μ΄ λ‘κ·Έλ§ μΆλ ₯λ©λλ€.

λ§μ½ μνλ urlλ‘ μ΄λνκ³ μΆμΌλ©΄ μλμ κ°μ΄ next()
λ₯Ό νΈμΆνλ©΄ λ©λλ€.
router.beforeEach(function (to, from, next) {
next();
});
μ μ κ°λλ‘ νμ΄μ§ μΈμ¦νκΈ°
μ μ κ°λλ₯Ό μ€μ μ ν리μΌμ΄μ λ‘μ§μ μ΄λ»κ² μ μ©ν μ μλμ§ μ΄ν΄λ³΄κ² μ΅λλ€. μμμ μ΄ν΄λ³Έ μμ μ Login μ»΄ν¬λνΈμ λ€μκ³Ό κ°μ΄ meta μ 보λ₯Ό μΆκ°νμμ΅λλ€.
var router = new VueRouter({
routes: [
// meta μ 보μ authRequiredλΌλ Boolean κ° μΆκ°
{ path: '/login', component: Login, meta: {authRequired: true} },
{ path: '/home', component: Home }
]
});
κ·Έλ¦¬κ³ beforeEach()
μ μ½λ°± ν¨μμ μ¬μ©μ μΈμ¦ μ¬λΆλ₯Ό 체ν¬νλ λ‘μ§μ μΆκ°ν©λλ€.
router.beforeEach(function (to, from, next) {
// to: μ΄λν urlμ ν΄λΉνλ λΌμ°ν
κ°μ²΄
if (to.matched.some(function(routeInfo) {
return routeInfo.meta.authRequired;
})) {
// μ΄λν νμ΄μ§μ μΈμ¦ μ λ³΄κ° νμνλ©΄ κ²½κ³ μ°½μ λμ°κ³ νμ΄μ§ μ νμ νμ§ μμ
alert('Login Please!');
} else {
console.log("routing success : '" + to.path + "'");
next(); // νμ΄μ§ μ ν
};
});
μ μ½λλ μ΄λνλ €λ νμ΄μ§μ λ§μ½ μΈμ¦ μ λ³΄κ° νμνλ©΄ κ²½κ³ μ°½μ λμ°κ³ νλ©΄μ μ ννμ§ μλ μ½λμ
λλ€.
λ·° λΌμ°ν° μΈμ€ν΄μ€μμ β/loginβμ ν΄λΉνλ λΌμ°ν° κ°μ²΄μλ§ authRequired
κ°μ μ€μ ν΄λ¨κΈ° λλ¬Έμ
β/homeβ νμ΄μ§λ‘ μ΄λν λλ next()
λ‘ νμ΄μ§λ₯Ό μ΄μ μμ΄ μ νν©λλ€. μ μ½λλ₯Ό μ€νν κ²°κ³Όλ μλμ κ°μ΅λλ€.

μ μμ μμ μ¬μ©ν .some()μ μλ°μ€ν¬λ¦½νΈ λ΄μ₯ APIμ λλ€. μ§μ λ λ°°μ΄μ λͺ¨λ μμλ₯Ό κ²μ¬νμ¬ μ‘°κ±΄μ λ§μ‘±μν€λ©΄ true κ°μ λ°ννκ³ , μλλ©΄ false κ°μ λ°νν©λλ€.
λΌμ°ν° κ°λμ μ»΄ν¬λνΈ κ°λ
μμμ μ΄ν΄λ³Έ μ μ κ°λμ λ§μ°¬κ°μ§λ‘ λΌμ°ν° κ°λμ μ»΄ν¬λνΈ κ°λλ κ°μ μλ¦¬λ‘ λμν©λλ€. λ€λ§ URL μ΄λμ λ§κΈ° μν΄ μ¬μ©νλ APIλ§ μ‘°κΈ λ€λ¦ λλ€.
λΌμ°ν° κ°λ
μ 체 λΌμ°ν μ΄ μλλΌ νΉμ λΌμ°ν μ λν΄μ κ°λλ₯Ό μ€μ νλ λ°©λ²μ μλμ κ°μ΅λλ€.
var router = new VueRouter({
routes: [
{
path: '/login',
component: Login,
beforeEnter: function(to, from, next) {
// μΈμ¦ κ° κ²μ¦ λ‘μ§ μΆκ°
}
}
]
})
μ»΄ν¬λνΈ κ°λ
λΌμ°ν°λ‘ μ§μ λ νΉμ μ»΄ν¬λνΈμ κ°λλ₯Ό μ€μ νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
const Login = {
template: '<p>Login Component</p>',
beforeRouteEnter (to, from, next) {
// Login μ»΄ν¬λνΈκ° νλ©΄μ νμλκΈ° μ μ μνλ λ‘μ§
// Login μ»΄ν¬λνΈλ μμ§ μμ±λμ§ μμ μμ
},
beforeRouteUpdate (to, from, next) {
// νλ©΄μ νμλ μ»΄ν¬λνΈκ° λ³κ²½λ λ μνλ λ‘μ§
// `this`λ‘ Login μ»΄ν¬λνΈλ₯Ό μ κ·Όν μ μμ
},
beforeRouteLeave (to, from, next) {
// Login μ»΄ν¬λνΈλ₯Ό νλ©΄μ νμν url κ°μ΄ λ³κ²½λκΈ° μ§μ μ λ‘μ§
// `this`λ‘ Login μ»΄ν¬λνΈλ₯Ό μ κ·Όν μ μμ
}
}
κΈλ³΄λ€ λ μ½κ² λ°°μ°λ μ¨λΌμΈ κ°μ
μ’ λ μΉμ νκ³ μμΈν μ€λͺ μ μνμ λ€λ©΄ μλ κ°μ’λ₯Ό μ΄μ©ν΄λ³΄μλ κ²λ μ’μ κ² κ°μμ π








