vue3 + ts <script setup>语法糖

这里是引用

1.data
2.computed
3.父传子
4.子传父
5.原型链绑定和组件使用
6.父子组件 v-model
7.nextTick
8.插槽
9.路由useRoute和useRouter
10.路由守卫
11.生命周期
12.父组件调子组件的方法 ref
13.store
14.watch

1.data

<template>
  <h1>{
   {
    name }}</h1>
  <h1>{
   {
    state.age }}</h1>
  <h1>{
   {
    sex }}</h1>
</template>

<script setup lang="ts">
import {
    reactive, ref, toRefs } from 'vue'
  // ref声明响应式数据,用于声明基本数据类型
  //const name = ref('东东吖')
    const name =ref<string>("")
  // 修改
  name.value = '小鲁班'

  // reactive声明响应式数据,用于声明引用数据类型
  const state = reactive({
   
    age: 24,
    sex: '男'
  })
  // 修改
  state.age = 24
  
  // 使用toRefs解构  template可直接使用{
   {name}}、{
   {sex}}
  const {
   age, sex} = toRefs(state)
  
</script>

2.computed

<template>
  <h1>{
   {
    count }}</h1>
  <h1>{
   {
   doubleCount}}</h1>
</template>

<script setup lang="ts">
import {
    ref,computed } from 'vue'
 // ref声明响应式数据,用于声明基本数据类型
  const count = ref(1)
  //computed获取双倍count' 
  const doubleCount =computed(()=>{
   
    return count.value*2
  })
</script>

3.父传子

父组件

<script setup lang="ts">
// 引入子组件(组件自动注册)
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <HelloWorld msg="东东吖" />
</template>

<style>

</style>

子组件

<template>
{
   {
   props.msg}}
<!-- 可省略props 
  <h1>{
   {
    msg }}</h1>
</template>

<script setup lang="ts">
// import { defineProps } from 'vue'
// defineProps在<script setup>中自动可用,无需导入
// 需在.eslintrc.js文件中【globals】下配置【defineProps: true】

// 声明props
const props = defineProps({
   
  msg: {
   
    type: String,
    default: "",
  },
});
</script>

4.子传父

//父组件:
<template>
  <HelloWorld :msg='state.msg' @changeMsg="changeMsg" />
</template>

<script setup lang="ts">
import {
    reactive } from "vue";
// 引入子组件(组件自动注册)
import HelloWorld from "./components/HelloWorld.vue";

const state = reactive({
   
  msg: "我是父组件原本的值",
});

const changeMsg = (val) => {
   
  state.msg = val;
};
</script>

子组件

//子组件:
<template>
  <h1>{
   {
    msg }}</h1>
<!-- 调用子传父事件 
  <button @click="changeMsg">点我</button>
</template>

<script setup lang="ts">
import {
    defineEmits } from "vue";
// import { defineEmits, defineProps } from 'vue'
// defineEmits和defineProps在<script setup>中自动可用,无需导入
// 需在.eslintrc.js文件中【globals】下配置【defineEmits: true】、【defineProps: true】

// 声明props
const props = defineProps({
   
  msg: {
   
    type: String,
    default: "",
  },
});

// 声明emit
const emit = defineEmits(["changeMsg"]);

// 声明子传父事件
const changeMsg = () => {
   
  emit("changeMsg", "我是子组件传过来的值");
};
</script>

5.原型链绑定和组件使用

main.ts

//main.ts

// 创建vue实例
const app=createApp(App)
// 获取原型
const prototype = app.config.globalProperties
// 绑定参数
prototype.name = '我是挂载在全局上的属性'
//第二种方式:
let helper = new TzPdmHelper(webSite);
app.config.globalProperties.$helper = helper;
//组件内获取使用
//引入
import {
    getCurrentInstance } from "vue";
// 获取原型
const {
    proxy } = getCurrentInstance();
// 输出
console.log(proxy.name);
console.log(proxy.$helper)
Vue3 中结合 Element Plus 使用 `<script setup>` 语法,你可以创建一个支持文件上传并实时预览图片的功能。Element Plus 提供了 `ElUpload` 组件,可以方便地处理文件上传。下面是一个简单的示例,展示如何设置图片上传、预览以及提供删除功能: ```html <template> <el-upload :action="uploadUrl" list-type="picture-card" :on-success="handleSuccess" :before-remove="beforeRemove" :file-list="previewFiles" > <el-button slot="trigger">选择图片</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png/jpeg格式的图片</div> </el-upload> <el-image v-for="(item, index) in previewFiles" :key="index" :src="item.url" :preview-src-list="item.urls"></el-image> </template> <script lang="ts"> import { onMounted, ref } from 'vue'; const uploadUrl = ref(''); const previewFiles = ref([]); // 存储预览图片信息 // 成功上传回调 async function handleSuccess(response: any, file: File) { const url = await uploadImage(file); previewFiles.value.push({ url, urls: [url] }); } // 图片上传到服务器的函数 async function uploadImage(file: File): Promise<string> { // 实现图片上传逻辑,这里只是一个占位符 return 'http://example.com/upload?filename=' + file.name; } // 删除文件前的确认提示 function beforeRemove(file: File): boolean { return confirm(`确定要删除 ${file.name}吗?`); } </script> ``` 在这个例子中: 1. `el-upload` 用于文件上传,`list-type="picture-card"` 表示显示图片卡片列表样式。 2. `handleSuccess` 函数接收服务器返回的响应和上传的文件,生成一个新的预览文件信息并添加到 `previewFiles` 数组。 3. `uploadImage` 是实际上传图片到服务器的异步函数,你需要根据实际需求编写这部分逻辑。 4. `beforeRemove` 会在用户点击删除按钮时触发,询问是否真的要删除。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值