<style scoped>
scoped style이 적용된 모습
a.router-link-exact-active {
//속성
}
await this.login();
// 메인 페이지로 이동
this.$router.push('/main');
위와 같은 방식을 뷰의 프로그래밍적 네비게이션이라고 한다.
this.$router
를 통해서 라우터 객체에 접근할 수 있고,this.$router.push()
에 경로를 파라미터로 전달해서 라우트를 변경할 수 있다.
<router-link to="">
로 이동한 것과 같은 효과를 가진다.
컴포넌트 간 데이터를 전달하는 방법
: props, event를 이용한 통신
: 이벤트 버스
: Vuex 저장소
설치
npm install vuex
//src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({});
//main.js
import store from '@/store';
new Vue({
render: h => h(App),
store, //store 전달
}).$mount('#app');
Vuex store는 뷰 컴포넌트에서 this.$store를 통해서 접근할 수 있다.
const store = {
state: {
username: '',
},
mutations: {
setUsername(state, username) {
state.username = username;
}
}
}
//LoginForm.vue
const {data} = await this.login();
//로그인한 사용자의 username값을 setUsername의 인자로 전달ㄴ
this.$store.commit('setUsername', data.username);
// Header.vue 사용자 이름 헤더에 표시
<header>{{ $store.state.username }}</header>
: store에 state는 항상 mutations를 이용해서 값을 변경해줘야 한다.
: mutations를 호출할 때는this.$store.commit()
을 통해 호출해야 하고, mutation는 항상 첫번째 인자로 state를 전달받는다.
: state는this.$store.state
를 통해서 접근할 수 있다.