성장과정(dev)/Frontend(feat. Vue, Next.js)

[vue] 특정영역 제외 버튼 클릭 시 페이지 이동

lowellSunny 2021. 3. 3. 14:25

vue에서는 라우터를 이용하여 페이지 이동이 일어난다.

1. html 소스 내에서 페이지 이동 소스코드

<td class=" cursor-pointer text-center">
  <router-link v-bind:to="'kyb-main/kyb-detail'">
    <p class="h4 mb-2">
    	<b-icon icon="arrow-right-circle"></b-icon>
    </p>
  </router-link>
</td>

2. html에서 goDetail을 호출하고, javascript에서 라우터에 파라미터까지 태워서 페이지 이동시키기

( 리스트에서 상세페이지로 가는 경우 id를 파라미터로 들고가는 경우가 많음 )

 export default {
        name: "SubmissionTable",

        methods: {
            goDetail( item ) {
            
            	// 여기서 name은 라우터에 정의된 라우트명
                //	내 소스는 멀티페이지라서 페이지 단위가 컴포넌트임
                this.$router.push({ name: 'submission-detail', params: {id: item.submission_id, email: item.email}});
            }
        },
        ...
        
}

3. 특정 영역일 경우 이벤트 바인딩 제외시키기

 export default {
        name: "SubmissionTable",
        
        data () {
        	return {
            	...
            	fields: [
                  { key: "created_at", label: "Submission Date", sortable: true },
                  { key: "email", sortable: true },
                  { key: "submission_id", label: "Submission ID", sortable: true },
                  { key: "data.name", label: "First Name", sortable: true },
                  
                  //tdClass 삽입
                  { key: "aml", label: "AML Status", sortable: true, tdClass: "btn-aml-status" },
                ],
                ...
            }
        },

        methods: {
            goDetail( item ) {
            
            	// 여기서 name은 라우터에 정의된 라우트명
                //	내 소스는 멀티페이지라서 페이지 단위가 컴포넌트임
				if( !event.target.classList.contains( "btn-aml-status" ) ) {
        			this.$router.push({ name: 'submission-detail', params: {id: item.submission_id, email: item.email}});
      			}            
      		}
        },
        ...
        
}

 

 

 

 

 

 

 

html코드 필요 시

<!-- bootstrap vue 이용, :fields속성이 data의  fields를 가리키고 있음 -->
<b-table
              :tbody-tr-class="'custom-table-tr'"
        class="w-100 mx-auto"
        :striped="false"
        :bordered="true"
        :small="true"
        :hover="false"
        :items="items"
        :fields="fields"
        :sort-by.sync="sortBy"
        :sort-desc.sync="sortDesc"
        :busy="isBusy"
        :filter="filter"
        :borderless="false"
        :outlined="false"
        :dark="false"
        :fixed="false"
        :no-border-collapse="noCollapse"
        @filtered="onFiltered"
        :head-variant="headVariant"
        :table-variant="tableVariant"
        :current-page="currentPage"
        :per-page="perPage"
        @row-clicked="goDetail"
      ></b-table>