解决uni-app开发过程中view、image等标签出现诸如“出现错误:类型“{ class: string; }”的参数不能赋给类型“.......”的问题

问题:

出现错误:类型“{ class: string; }”的参数不能赋给类型“ComponentPublicInstanceConstructor<{ $: ComponentInternalInstance; $data: {}; $props: { style?: unknown; readonly hoverClass?: string | undefined; readonly hoverStopPropagation?: boolean | undefined; ... 12 more ...; class?: unknown; }; ... 10 more ...; $watch<T extends string | ((...args: any) => any)>(source: T, c...”的参数。
不能将类型“{ class: string; }”分配给类型

解决办法一:

tsconfig.json 增加配置

{
  "extends": "@vue/tsconfig/tsconfig.json",
  "compilerOptions": {
    "allowJs": true,
    "sourceMap": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },
    "lib": ["esnext", "dom"],
    "types": ["@dcloudio/types", "miniprogram-api-typings", "@uni-helper/uni-app-types","@uni-helper/uni-ui-types"]
  },
  "vueCompilerOptions": {
    //新增加的配置 experimentalRuntimeMode 已废弃,现调整为 nativeTags,请升级 Volar 插件至最新版本
    "nativeTags": ["block", "component", "template", "slot"]
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

如果用解决办法一还是爆红的话,接着做第二步

使用Vue - Official插件版本为v2.0.12(重要!!!!!一定是2.0.12这个版本)

package.json

{
  "name": "demo",
  "version": "0.0.0",
  "author": {
    "name": "demo",
    "url": "https://web.itheima.com/"
  },
  "scripts": {
    "dev:app": "uni -p app",
    "dev:app-android": "uni -p app-android",
    "dev:app-ios": "uni -p app-ios",
    "dev:custom": "uni -p",
    "dev:h5": "uni",
    "dev:h5:ssr": "uni --ssr",
    "dev:mp-alipay": "uni -p mp-alipay",
    "dev:mp-baidu": "uni -p mp-baidu",
    "dev:mp-kuaishou": "uni -p mp-kuaishou",
    "dev:mp-lark": "uni -p mp-lark",
    "dev:mp-qq": "uni -p mp-qq",
    "dev:mp-toutiao": "uni -p mp-toutiao",
    "dev:mp-weixin": "uni -p mp-weixin",
    "dev:quickapp-webview": "uni -p quickapp-webview",
    "dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
    "dev:quickapp-webview-union": "uni -p quickapp-webview-union",
    "build:app": "uni build -p app",
    "build:app-android": "uni build -p app-android",
    "build:app-ios": "uni build -p app-ios",
    "build:custom": "uni build -p",
    "build:h5": "uni build",
    "build:h5:ssr": "uni build --ssr",
    "build:mp-alipay": "uni build -p mp-alipay",
    "build:mp-baidu": "uni build -p mp-baidu",
    "build:mp-kuaishou": "uni build -p mp-kuaishou",
    "build:mp-lark": "uni build -p mp-lark",
    "build:mp-qq": "uni build -p mp-qq",
    "build:mp-toutiao": "uni build -p mp-toutiao",
    "build:mp-weixin": "uni build -p mp-weixin",
    "build:quickapp-webview": "uni build -p quickapp-webview",
    "build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
    "build:quickapp-webview-union": "uni build -p quickapp-webview-union",
    "tsc": "vue-tsc --noEmit --skipLibCheck",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
    "prepare": "husky install",
    "lint-staged": "lint-staged"
  },
  "lint-staged": {
    "*.{js,ts,vue}": [
      "eslint --fix"
    ]
  },
  "dependencies": {
    "@dcloudio/uni-app": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-app-plus": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-components": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-h5": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-alipay": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-baidu": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-jd": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-lark": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-qq": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-mp-xhs": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-ui": "^1.5.6",
    "ali-oss": "^6.21.0",
    "crypto-js": "^4.2.0",
    "js-base64": "^3.7.7",
    "pinia": "2.0.27",
    "pinia-plugin-persistedstate": "^3.2.0",
    "vue": "^3.2.47",
    "vue-i18n": "^9.2.2"
  },
  "devDependencies": {
    "@dcloudio/types": "^3.3.3",
    "@dcloudio/uni-automator": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-cli-shared": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-stacktracey": "3.0.0-alpha-3081220230802001",
    "@dcloudio/uni-vue-devtools": "3.0.0-alpha-3080220230511001",
    "@dcloudio/vite-plugin-uni": "3.0.0-alpha-3081220230802001",
    "@rushstack/eslint-patch": "^1.1.4",
    "@types/node": "^18.11.9",
    "@uni-helper/uni-app-types": "^0.5.8",
    "@uni-helper/uni-ui-types": "^0.5.11",
    "@vue/eslint-config-prettier": "^7.0.0",
    "@vue/eslint-config-typescript": "^11.0.0",
    "@vue/runtime-core": "^3.2.45",
    "@vue/tsconfig": "^0.4.0",
    "eslint": "^8.22.0",
    "eslint-plugin-vue": "^9.3.0",
    "husky": "^8.0.0",
    "lint-staged": "^13.0.3",
    "miniprogram-api-typings": "^3.12.0",
    "prettier": "^2.7.1",
    "sass": "^1.56.1",
    "typescript": "^5.1.6",
    "vite": "^4.4.9",
    "vue-tsc": "^1.8.8"
  }
}

### uni-app 中实现图片上传功能 在 `uni-app` 应用程序中,可以利用内置的组件如 `uni-upload` 或者更灵活的方式通过调用 API 来完成图片上传的功能。对于前端部分,可以通过如下方式构建: #### 前端代码示例 使用 `<template>` 部分定义视图结构,其中包含了用于触发文件选择器和展示已上传图像 URL 的元素。 ```html <template> <view class="content"> <!-- 使用uni-file-picker组件 --> <uni-file-picker ref="image" limit="1" title="" fileMediatype="image" :listStyles="listStyles" :value="filePathsList" @success="successUpload" :auto-upload="false" @select="handleSelect" @delete="handleDelete" :readonly="isEdit"/> <!-- 显示上传后的图片 --> <img v-if="imageUrl" :src="imageUrl" alt="Uploaded Image" /> <!-- 提交按钮 --> <button type="primary" @click="submit">提交</button> </view> </template> <script> export default { data() { return { imageUrl: '', // 存储上传成功后的图片URL filePathsList: [], // 文件路径列表 listStyles: {}, // 自定义样式对象 isEdit: false, // 是否只读状态 }; }, methods: { handleSelect(e) { console.log('选择了文件:', e); }, successUpload(res) { this.imageUrl = res.tempFilePath; console.log('上传成功返回的数据:', res); }, submit() { if (!this.imageUrl) { uni.showToast({ icon: 'none', title: '请选择要上传的图片' }); return; } // 调用API进行实际上传操作 uni.uploadFile({ url: 'http://your.server.com/upload', // 替换成服务器的实际地址 filePath: this.imageUrl, name: 'file', formData: {}, success: (response) => { let result = JSON.parse(response.data); if(result.code === 200){ uni.showToast({ icon: 'success', title: '上传成功!' }); // 更新页面上的图片链接或其他逻辑... }else{ uni.showToast({ icon: 'error', title: '上传失败,请重试...' }); } }, fail: () => { uni.showToast({ icon: 'error', title: '网络错误,请稍后再试...' }); } }); } } } </script> ``` 这段代码展示了如何创建一个简单的界面让用户可以选择本地图片并通过点击“提交”按钮将其发送到指定的服务端接口[^4]。 #### 后端处理方法 假设后端采用 Spring Boot 构建,则可以在控制器层编写相应的处理器来接受来自客户端的请求并保存接收到的二进制流作为图片文件。下面是一个简化版的例子说明这一过程: ```java @RestController @RequestMapping("/api/v1") public class FileController { private static final Logger logger = LoggerFactory.getLogger(FileController.class); @PostMapping(value="/upload", consumes={"multipart/form-data"}) public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) throws IOException { try { String originalFilename = file.getOriginalFilename(); byte[] bytes = file.getBytes(); Path path = Paths.get(System.getProperty("user.dir"), "uploads", originalFilename); Files.write(path, bytes); Map<String, Object> resultMap = new HashMap<>(); resultMap.put("message","File uploaded successfully"); resultMap.put("fileName",originalFilename); resultMap.put("filePath",path.toString()); return new ResponseEntity<>(new ObjectMapper().writeValueAsString(resultMap), HttpStatus.OK); } catch(Exception ex) { logger.error(ex.getMessage(),ex); throw new RuntimeException("Failed to save the file."); } } } ``` 此 Java 方法会监听 `/api/v1/upload` 这一路由下的 POST 请求,并期望接收 multipart 表单格式的内容。一旦接收到有效的文件输入,它就会尝试将这些数据写入磁盘中的特定位置,并向客户端反馈一条消息确认上传的结果[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值