vue+ts:Vue.set在对象和数组中的具体运用

为什么用Vue.set

最近在Vue项目实践中发现,有时候直接改变数组或对象的在值,值改变了,但页面却没有同时修改,通过查看Vue文档才发现,原来Vue不能检测数组或对象的变化,要想改变数组或对象的值时,需要使用Vue.set()方法进行操作。

在这里插入图片描述

Vue.set在对象中使用

Vue.set()在对象中使用格式为Vue.set(修改的对象, ‘对象的key’, ‘修改的值’),比入Vue.set(this.vueSetObj, ‘name’, ‘周bug’);这个就会把name的吴越修改成周bug这个值。Vue.set()在对象中使用一般分为两种情况
情况一:如果Vue.set(修改的对象, ‘对象的key’, ‘修改的值’)对象的key在对象中存在,则修改

      <div>
        <h3>id:{{ vueSetObj.id }}</h3>
        <h3>name:{{ vueSetObj.name }}</h3>
        <h3>class:{{ vueSetObj.class }}</h3>
        <a-button type="primary" @click="objSet">对象Vue.set修改name</a-button>
      </div>
  vueSetObj: { id: number; name: string; class: string } = {
    id: 1,
    name: '吴越',
    class: '3班',
  };

  objSet() {
    Vue.set(this.vueSetObj, 'name', '周bug');
    console.log('vue.set后', this.vueSetObj);
  }

在这里插入图片描述
在这里插入图片描述
情况二:如果Vue.set(修改的对象, ‘对象的key’, ‘修改的值’)对象的key在对象中不存在,则为对象添加一个新的key和值

Vue.set在数组中使用

Vue.set()在数组中使用格式为Vue.set(修改的数组, ‘修改数组的索引’, ‘修改的值’)。

数组使用情况一:当数组元素为对象时

      <div v-for="(obj, index) in vueSetObj" :key="index">
        <h3>id:{{ obj.id }}</h3>
        <h3>name:{{ obj.name }}</h3>
        <h3>class:{{ obj.class }}</h3>
        <a-button type="primary" @click="arrayVueSet(index)">对象Vue.set修改name</a-button>
      </div>
  vueSetObj: { id: number; name: string; class: string }[] = [
    {
      id: 1,
      name: '张一',
      class: '1班',
    },
    {
      id: 2,
      name: '张二',
      class: '2班',
    },
    {
      id: 3,
      name: '张三',
      class: '3班',
    },
  ];

  arrayVueSet(index) {
    Vue.set(this.vueSetObj, index, {
      id: 100,
      name: '张100',
      class: '100班',
    });
  }

在这里插入图片描述

数组使用情况二:当数组的元素为基本数据类型时

      <div v-for="(element, index) in vueSetObj" :key="index">
        <h3>数组元素:{{ element }}</h3>
        <a-button type="primary" @click="arrayVueSet(index)">对象Vue.set修改name</a-button>
      </div>
  vueSetArray: any[] = [1, 2, 3, 4, 5, 6, 7];

  arrayVueSet(index) {
    Vue.set(this.vueSetObj, index, index + 100);
  }

在这里插入图片描述

总结:

最后发现数组在Vue.set()的使用情况没有多大变化,都是根据数组的下标去修改对应的值,而对象如果在使用Vue.set中,操作的key存在时,则修改对应key的值,不存在则为对象添加新的key和值

为了在Vue 3项目中使用TypeScript和Webpack,并且正确地生成.d.ts声明文件,你需要按照以下步骤进行配置: 1. 安装依赖: ```bash npm install --save-dev typescript ts-loader vue-loader@next @types/vue @vue/compiler-sfc ``` 2. 创建`tsconfig.json`文件: 在项目根目录下创建一个名为`tsconfig.json`的文件,并添加以下内容: ```json { "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, "jsx": "preserve", "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "lib": ["esnext", "dom"], "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "tests/**/*.ts", "tests/**/*.tsx"] } ``` 3. 配置Webpack: 在Webpack配置文件中,添加对TypeScript和Vue文件的处理规则。例如,如果你使用的是`webpack.config.js`文件,可以按照以下示例进行配置: ```javascript const path = require('path'); module.exports = { // ...其他配置 resolve: { extensions: ['.js', '.ts', '.vue'], alias: { '@': path.resolve(__dirname, 'src') } }, module: { rules: [ { test: /\.tsx?$/, loader: 'ts-loader', exclude: /node_modules/, options: { appendTsSuffixTo: [/\.vue$/] } }, { test: /\.vue$/, loader: 'vue-loader' } ] }, // ...其他配置 }; ``` 4. 添加Vue文件声明: 在项目的`src`目录中,为Vue文件添加一个`.d.ts`的同名文件。例如,对于`HelloWorld.vue`组件,创建一个名为`HelloWorld.vue.d.ts`的文件,并添加以下内容: ```typescript declare module '*.vue' { import { ComponentOptions } from 'vue'; const componentOptions: ComponentOptions; export default componentOptions; } ``` 5. 构建项目: 运行Webpack构建命令,以启动TypeScript编译和生成声明文件: ```bash npm run build ``` 如果一切顺利,你的Vue 3 + TypeScript项目应该可以成功编译,并且在构建过程中会生成相应的.d.ts声明文件。 希望以上步骤可以帮助你配置Vue 3 + TypeScript + Webpack项目的.d.ts声明文件。如果有任何问题,请随时追问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值