基于 vite 创建
npm create vue@latest
.vscode/extensions.json recommendations
.gitignore
env.d.ts
index.html
package-lock.json
package.json
tsconfig.app.json
tsconfig.json
tsconfig.node.json
vite.config.ts
极简插件(可以下载 chrome 插件)
Options API
<script lang="ts">
import Person from './components/Person.vue';
export default {
name: 'App',
components: { Person },
data() {
return {};
},
methods: {},
computed: {},
watch: {},
};
</script>
Composition API
<script lang="ts">
import Person from './components/Person.vue';
export default {
name: 'App',
components: { Person },
setup() {
let name = 'zhangsan';
function changeName() {
name = 'lisi';
}
return { name, changeName };
},
data() {
return {
data_name: this.name,
};
},
beforeCreate() { },
};
</script>
setup 语法糖
<script lang="ts" setup name="App">
import { ref, reactive } from 'vue';
import Person from './components/Person.vue';
</script>
import VueSetupExtend from 'vite-plugin-vue-setup-extend';
export default defineConfig({
plugins: [
VueSetupExtend()
]
})
ref, reactive
import { ref, reactive } from 'vue';
let name = 'zhangsan';
let age = ref(18);
function changeAge() {
age.value += 1;
}
let car = ref({ brand: '奔驰', price: 100 });
function changePrice() {
car.value.price += 10;
car.value = { brand: '奥拓', price: 1 };
}
let games = reactive([
{ id: 'aysdytfsatr01', name: '王者荣耀' }
]);
function changeFirstGame() {
games[0].name = '流星蝴蝶剑';
}
toRefs, toRed
import { reactive, toRefs, toRed } from 'vue';
let person = reactive({
name: '张三',
age: 18,
});
let { name, age } = toRefs(person);
let age = toRef(person, 'age');
computed
import { ref, computed } from 'vue';
let firstName = ref('zhang')
let lastName = ref('san')
let fullName1 = computed(() => {
return firstName.value.slice(0, 1).toUpperCase() + firstName.value.slice(1) + '-' + lastName.value;
});
let fullName2 = computed({
get() {
return firstName.value.slice(0, 1).toUpperCase() + firstName.value.slice(1) + '-' + lastName.value;
},
set(val) {
const [str1, str2] = val.split('-');
firstName.value = str1;
lastName.value = str2;
},
});
function changeFullName() {
fullName.value = 'li-si';
}
watch
import { ref, watch } from 'vue';
let sum = ref(0);
const stopWatch = watch(sum, (new, old) => {
if (new >= 10) stopWatch();
});
let person = ref({ name:'张三', age:18 });
watch(person, (new, old) => { ... }, { deep: true });
let person = reactive({
name: '张三',
car: { c1: '奔驰', c2: '宝马', },
});
watch(person, (new, old) => { ... });
watch(() => person.name, () => { ... });
watch( person.car, () => { ... });
watch(() => person.car, () => { ... });
watch(() => person.car, () => { ... }, { deep: true });
watch(
[() => person.name, person.car],
(new, old) => { ... },
{ deep: true }
);