uni-app 通过vue-cli创建的项目在H5端无法正常使用uni-forms、uni-forms-item组件

uni-app 通过vue-cli创建的项目在H5端无法正常使用uni-forms、uni-forms-item组件

产品分类:

uniapp/H5

PC开发环境操作系统:

Windows

PC开发环境操作系统版本号:

Windows 10 21H2(64位)

浏览器平台:

Chrome

浏览器版本:

102.0.5005.63(正式版本)(64 位)

项目创建方式:

CLI

CLI版本号:

4.5.15

示例代码:

<uni-forms ref="valiForm" :rules="rules" :model-value="form" border>  
      <uni-forms-item label="账号" required name="username">  
        <uni-easyinput v-model="form.username" :input-border="false" placeholder="请输入账号" />  
      </uni-forms-item>  
      <uni-forms-item label="密码" required name="password">  
        <uni-easyinput v-model="form.password" :input-border="false" type="password" placeholder="请输入密码" />  
      </uni-forms-item>  
</uni-forms>
export default {  
  name: "index",  
  data() {  
    return {  
      form: {  
        username: "",  
        password: ""  
      },  
      rules: {  
        username: {  
          rules: [  
            { required: true, errorMessage: "账号不能为空" }  
          ]  
        },  
        password: {  
          rules: [  
            { required: true, errorMessage: "密码不能为空" }  
          ]  
        }  
      },  
      submitLoading: false  
    }  
  }  
}

操作步骤:

<uni-forms ref="valiForm" :rules="rules" :model-value="form" border>  
      <uni-forms-item label="账号" required name="username">  
        <uni-easyinput v-model="form.username" :input-border="false" placeholder="请输入账号" />  
      </uni-forms-item>  
      <uni-forms-item label="密码" required name="password">  
        <uni-easyinput v-model="form.password" :input-border="false" type="password" placeholder="请输入密码" />  
      </uni-forms-item>  
</uni-forms>
export default {  
  name: "index",  
  data() {  
    return {  
      form: {  
        username: "",  
        password: ""  
      },  
      rules: {  
        username: {  
          rules: [  
            { required: true, errorMessage: "账号不能为空" }  
          ]  
        },  
        password: {  
          rules: [  
            { required: true, errorMessage: "密码不能为空" }  
          ]  
        }  
      },  
      submitLoading: false  
    }  
  }  
}

预期结果:

正常显示

实际结果:

无法正常显示。并报错:

  1. TypeError: Cannot set properties of undefined (setting ‘default’)
  2. [Vue warn]: Failed to resolve async component

bug描述:

通过vue-cli创建的uniapp项目,选择默认模板。然后通过uni_modules 导入全部uni-ui组件(使用HBuilderX导入插件),然后在页面使用uni-forms以及uni-forms-item组件,在小程序端正常,发现无法正常在H5端运行。报错信息如下图: bug截图

4 回复

我也是这个报错,有人遇到吗?


使用npm构建,不要使用yarn

回复 x***@sina.com: 就是用的npm,似乎写法里不要用require?

在 uni-app 中,通过 vue-cli 创建的项目在 H5 端无法正常使用 uni-formsuni-forms-item 组件,可能是由于以下几个原因导致的:

1. 组件未正确引入或注册

确保你已经正确引入了 uni-formsuni-forms-item 组件,并且在页面或组件中进行了注册。

import uniForms from '[@dcloudio](/user/dcloudio)/uni-ui/lib/uni-forms/uni-forms.vue'
import uniFormsItem from '[@dcloudio](/user/dcloudio)/uni-ui/lib/uni-forms-item/uni-forms-item.vue'

export default {
  components: {
    uniForms,
    uniFormsItem
  }
}

2. 组件库未正确安装

确保你已经安装了 [@dcloudio](/user/dcloudio)/uni-ui 组件库。如果没有安装,可以通过以下命令进行安装:

npm install [@dcloudio](/user/dcloudio)/uni-ui --save

3. H5 端兼容性问题

uni-formsuni-forms-item 组件在 H5 端可能存在兼容性问题。你可以尝试以下方法来解决:

3.1 使用 v-if 判断平台

你可以在使用 uni-formsuni-forms-item 组件时,通过 v-if 判断当前平台是否为 H5,如果是 H5 端,则使用其他替代方案。

<template>
  <div>
    <uni-forms v-if="!isH5">
      <uni-forms-item label="用户名">
        <input v-model="username" />
      </uni-forms-item>
    </uni-forms>
    <form v-else>
      <label>用户名</label>
      <input v-model="username" />
    </form>
  </div>
</template>

<script>
export default {
  computed: {
    isH5() {
      return process.env.VUE_APP_PLATFORM === 'h5'
    }
  }
}
</script>

3.2 使用 uni-app 提供的 uni-composite 组件

uni-compositeuni-app 提供的一个跨平台组件库,可以在 H5 端和微信小程序等平台上使用。你可以尝试使用 uni-composite 中的表单组件。

<template>
  <uni-composite>
    <uni-form>
      <uni-form-item label="用户名">
        <input v-model="username" />
      </uni-form-item>
    </uni-form>
  </uni-composite>
</template>

<script>
import { UniComposite, UniForm, UniFormItem } from 'uni-composite'

export default {
  components: {
    UniComposite,
    UniForm,
    UniFormItem
  }
}
</script>

4. 检查 vue-cli 配置

确保你的 vue-cli 配置正确,特别是 vue.config.js 中的配置。你可以检查是否有任何配置影响了 uni-formsuni-forms-item 组件的正常使用。

5. 更新 uni-appuni-ui 版本

确保你使用的 uni-appuni-ui 是最新版本,旧版本可能存在一些已知的 bug 或兼容性问题。

npm update [@dcloudio](/user/dcloudio)/uni-app [@dcloudio](/user/dcloudio)/uni-ui

6. 检查控制台错误信息

打开浏览器的开发者工具,检查控制台是否有任何错误信息。根据错误信息进行排查和修复。

7. 使用 uni-app 官方示例

你可以参考 uni-app 官方提供的示例代码,确保你的代码与官方示例一致。

<template>
  <uni-forms>
    <uni-forms-item label="用户名">
      <input v-model="username" />
    </uni-forms-item>
  </uni-forms>
</template>

<script>
import uniForms from '[@dcloudio](/user/dcloudio)/uni-ui/lib/uni-forms/uni-forms.vue'
import uniFormsItem from '[@dcloudio](/user/dcloudio)/uni-ui/lib/uni-forms-item/uni-forms-item.vue'

export default {
  components: {
    uniForms,
    uniFormsItem
  }
}
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!