vue 3+ts 를 이용 하여 관리 배경 을 실현 합 니 다(추가 삭제 검사)
10049 단어 vue3TypeScript백 스테이지 관리
이전 vue 2 때 가장 쉬 운 방법 은 한 페이지 의 논 리 를 쓴 다음 에 각 페이지 에 직접 복사 하여 API 와 파 라 메 터 를 수정 하면 됩 니 다.고 급 스 러 운 것 은 mixin 함 수 를 이용 하여 재 활용 논 리 를 추출 하고 각 페이지 에 mixin 을 도입 하 는 것 입 니 다.
vue 3 이후 composition API 가 추가 되 었 습 니 다.본 고 는 coposition API 를 이용 하여 재 활용 가능 한 논 리 를 coposition API 에서 추출 하고 ts 를 도입 하여 간단 한 관리 배경 기능 을 실현 하 는 것 이다.
@vue/cli 로 프로젝트 만 들 기
우선@vue/cli 를 최신 버 전 으로 업그레이드 해 야 합 니 다.본문 은 4.5.6 버 전 을 사용한다.
vue create admin
cd admin
npm run serve
create 수 동 으로 Manually selection features 를 선택 하면 대화 형 선택 이 있 습 니 다.router,vuex 등 옵션 을 설치 할 지,빈 칸 은 선택 여 부 를 전환 할 수 있 습 니 다.TypeScript,Router,Vuex,CSS Pre-processors 를 선택 하 십시오.우 리 는 axios+axios-mock-adapter+mockjs 를 이용 하여 인터페이스 요청,인터페이스 시 뮬 레이 션 및 가짜 데이터 생 성 을 한 다음 에 이 가방 을 설치 합 니 다.
npm install axios
npm install -D axios-mock-adapter mockjs
프로젝트 전체 프레임 워 크우리 의 프로젝트 에 Header 가 포함 되 어 있다 고 가정 하면 Header 의 역할 은 페이지 를 전환 하 는 것 입 니 다.두 페이지 는 각각 List 와 About 이 고 이 두 페이지 는 모두 간단 한 목록+삭제 와 검 사 를 하 는 작업 입 니 다.
경로
router 에 list 의 경로 정 보 를 추가 해 야 합 니 다.
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/about',
name: 'About',
component: () => { return import(/* webpackChunkName: "about" */ '../views/About.vue'); },
},
{
path: '/list',
name: 'List',
component: () => { return import(/* webpackChunkName: "list" */ '../views/List.vue'); },
},
];
리스트 페이지우선 리스트 페이지 의 구 조 를 적 으 면 리스트 와 About 의 구조 가 대체로 비슷 하 다.
<template>
<div class='content_page'>
<div class='content_body'>
<div class='content_button'>
<button class='add primary' @click='addItem' title=' '> </button>
</div>
<div class='content_table'>
<table>
<thead>
<tr>
<th v-for='item in thead' :key='item'>{{item}}</th>
</tr>
</thead>
<tbody>
<tr v-for='(item, index) in list' :key='item.id'>
<td>
<span :title='item.id'>{{item.id}}</span>
</td>
<td>
<div v-if='index === currentIndex'>
<input
v-model='item.name'
title='name'
/>
</div>
<span :title='item.name' v-else>{{item.name}}</span>
</td>
<td :title='item.sex'>
<div v-if='index === currentIndex'>
<input
v-model='item.sex'
title='sex'
/>
</div>
<span :title='item.sex' v-else>{{item.sex ? ' ' : ' '}}</span>
</td>
<td :title='item.birth'>
<div v-if='index === currentIndex'>
<input
v-model='item.birth'
title='birth'
/>
</div>
<span :title='item.birth' v-else>{{item.birth}}</span></td>
<td :title='item.address'>
<div v-if='index === currentIndex'>
<input
v-model='item.address'
title='birth'
/>
</div>
<span :title='item.address' v-else>{{item.address}}</span>
</td>
<td>
<div v-if='index === currentIndex'>
<button
class='primary confirm'
@click='confirm(item)'
> </button>
<button
@click='cancel(item)'
> </button>
</div>
<span v-else>
<span @click='editItem(index)'>
edit
</span>
<span @click='deleteItem(index, item)'>delete</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
그 중에서 addItem,editItem,deleteItem,confirm,cancel 등 몇 가지 방법 을 사 용 했 습 니 다.모든 목록 페이지 의 이 몇 가지 방법 기능 은 똑 같 습 니 다.유일한 차이 점 은 요청 한 API 입 니 다.우 리 는 이 몇 개의 API 를 매개 변수 로 하여 삭제 하고 검사 하 는 방법 을 setup 함수 에 추출 하여 재 활용 할 수 있 습 니 다.다음은 중점 적 인 composition API 로 넘 어 갑 니 다.composition API 구현
import { ref, onMounted } from 'vue';
import {ItemType, FetchType, DeleteType, AddType, EditType} from '../../types/index';
export const compositionApi = (
fetchApi: FetchType,
deleteApi: DeleteType,
confirmAddApi: AddType,
confirmEditApi: EditType,
itemData: ItemType,
) => {
const currentIndex = ref<number | null>(null);
const list = ref([{}]);
const getList = () => {
fetchApi().then((res: any) => {
list.value = res.data.list;
});
};
const addItem = () => {
list.value.unshift(itemData);
currentIndex.value = 0;
};
const editItem = (index: number) => {
currentIndex.value = index;
};
const deleteItem = (index: number, item: ItemType) => {
deleteApi(item).then(() => {
list.value.splice(index, 1);
// getList();
});
};
const cancel = (item: ItemType) => {
currentIndex.value = null;
if (!item.id) {
list.value.splice(0, 1);
}
};
const confirm = (item: ItemType) => {
const api = item.id ? confirmEditApi : confirmAddApi;
api(item).then(() => {
getList();
cancel(item);
});
};
onMounted(() => {
getList();
});
return {
list,
currentIndex,
getList,
addItem,
editItem,
deleteItem,
cancel,
confirm,
};
};
export default compositionApi;
다음은 List 와 About 페이지 의 setup 방법 에 도입 하면 된다.
<script lang='ts'>
import axios from 'axios';
import { defineComponent, reactive } from 'vue';
import { compositionApi } from '../components/composables/index';
import {ItemType} from '../types/index';
const ListComponent = defineComponent({
name: 'List',
setup() {
const state = reactive({
itemData: {
id: '',
name: '',
sex: 0,
birth: '',
address: '',
},
});
const fetchApi = () => {
return axios.get('/users');
};
const deleteApi = (item: ItemType) => {
return axios.post('/users/delete', { id: item.id });
};
const confirmAddApi = (item: ItemType) => {
return axios.post('/users/add', {
name: item.name,
birth: item.birth,
address: item.address,
});
};
const confirmEditApi = (item: ItemType) => {
return axios.post('/users/edit', {
id: item.id,
name: item.name,
birth: item.birth,
address: item.address,
});
};
const localPageData = compositionApi(fetchApi, deleteApi, confirmAddApi, confirmEditApi, state.itemData);
return {
state,
...localPageData,
};
},
data() {
return {
thead: [
'id',
'name',
'sex',
'birth',
'address',
'option',
],
};
}
});
이렇게 해서 List 페이지 의 논 리 는 기본적으로 완성 되 었 다.마찬가지 로 About 페이지 의 논리 도 완성 되 었 습 니 다.다른 것 은 About 페이지 에서 인터페이스 가 요청 한 주 소 를 변경 하 는 것 입 니 다.최종 실현 효과
composition API vs Mixin
vue 3 이전에 코드 를 재 활용 하면 보통 mixin 을 사용 하지만 mixin 은 coposition API 의 약점 에 비해 홈 페이지 에서 다음 과 같이 설명 합 니 다.
프로젝트 에 사 용 된 TS 인터페이스의 정의,아 날로 그 데이터 와 인터페이스 요청 본 고 는 구체 적 으로 소개 되 지 않 았 으 며 알 고 싶 으 면 소스 코드 를 볼 수 있 습 니 다.
여기 찍 어 주세요.
vue 3+ts 를 이용 하여 관리 배경(추가 삭제 및 검사)을 실현 하 는 이 글 은 여기까지 소개 되 었 습 니 다.vue 3 TypeScript 관리 배경 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
내 새 책,오픈 소스 관리 시스템, vue-bag-adminvue-bag-admin,use Vue3+Vite2.6+TypeScript+ant-design-vue,Provide the basic framework, quickly build enterprise-level bac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.