element-ui动态编辑标签

该代码示例展示了如何在Vue应用中使用v-for指令动态渲染标签,并通过点击事件处理标签的添加和删除。用户点击NewTag按钮显示输入框,输入新标签后自动添加到列表并失去焦点。关闭标签时,对应值从数组中移除,界面实时更新。

在这里插入图片描述
点击叉叉,标签消失,点击New Tag,显示输入框,输入完成后生成标签,并且出现New Tag标签。

代码:

<el-tag
  :key="tag"
  v-for="tag in dynamicTags"
  closable
  :disable-transitions="false"
  @close="handleClose(tag)">
  {{tag}}
</el-tag>
<el-input
  class="input-new-tag"
  v-if="inputVisible"
  v-model="inputValue"
  ref="saveTagInput"
  size="small"
  @keyup.enter.native="handleInputConfirm"
  @blur="handleInputConfirm"
>
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput">+ New Tag</el-button>

<style>
  .el-tag + .el-tag {
    margin-left: 10px;
  }
  .button-new-tag {
    margin-left: 10px;
    height: 32px;
    line-height: 30px;
    padding-top: 0;
    padding-bottom: 0;
  }
  .input-new-tag {
    width: 90px;
    margin-left: 10px;
    vertical-align: bottom;
  }
</style>

<script>
  export default {
    data() {
      return {
        dynamicTags: ['标签一', '标签二', '标签三'],
        inputVisible: false,
        inputValue: ''
      };
    },
    methods: {
      handleClose(tag) {
        this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
      },

      showInput() {
        this.inputVisible = true;
        this.$nextTick(_ => {
          this.$refs.saveTagInput.$refs.input.focus();
        });
      },

      handleInputConfirm() {
        let inputValue = this.inputValue;
        if (inputValue) {
          this.dynamicTags.push(inputValue);
        }
        this.inputVisible = false;
        this.inputValue = '';
      }
    }
  }
</script>

通过v-for,根据description的内容进行渲染。当点击New Tag后,通过v-if和v-else来显示输入框,并去掉New Tag,

this.$nextTick(_ => {
	this.$refs.saveTagInput.$refs.input.focus();
});

来获取到焦点
在完成输入后由于绑定了失去焦点的事件和回车按下后的事件,会将新的内容放入数组中,通过v-for重新进行渲染,并且重置相关值以消失。
关闭标签则是直接对数组进行剪切,删除某个值,再通过v-for重新进行渲染。

### 关于 Element-UI 标签无代码提示的解决方案 在 Vue 项目中使用 Element-UIElement-Plus 时,如果遇到 IDE 中没有代码提示的情况,可能是由于以下几个原因引起的: #### 可能的原因分析 1. **缺少 TypeScript 类型定义文件** 如果项目的依赖项未正确安装或者缺失 `@types/element-ui` 的类型声明文件,则可能导致 IDE 无法识别组件标签[^1]。 2. **IDE 配置问题** 开发工具(如 IntelliJ IDEA、WebStorm)可能未能正确解析 JavaScript 库或 Vue 文件中的自定义标签。这通常可以通过调整设置来修复[^2]。 3. **缓存问题** Webpack 编译器或其他构建工具可能会因为缓存而导致某些功能失效。清除缓存可以解决问题。 --- ### 解决方案 以下是针对上述问题的具体解决办法: #### 方法一:确认依赖是否正确安装 确保已正确安装 `element-ui` 和其对应的类型声明文件。运行以下命令重新安装依赖: ```bash npm install element-ui --save npm install @types/element-ui --save-dev ``` 如果使用的是 `element-plus`,则需安装其官方推荐的类型支持包: ```bash npm install element-plus --save ``` 注意:对于 `element-plus`,建议切换至最新版本,并启用 Vite 构建工具以获得更好的开发体验。 --- #### 方法二:配置 IDE 支持 Vue 自定义标签 在 IntelliJ IDEA 或 WebStorm 中执行以下操作以增强对 Vue 组件的支持: 1. 打开菜单栏中的 **File -> Settings**。 2. 导航到 **Languages & Frameworks -> JavaScript -> WebSockets**,并将语言级别设为 ES6 或更高版本。 3. 前往 **Plugins** 页面,搜索并安装 **Vue.js** 插件以及 **Element UI** 官方插件。 4. 清除缓存并重启 IDE:通过 **File -> Invalidate Caches / Restart** 来完成此步骤。 这些更改可以帮助 IDE 更好地理解 Vue SFC (Single File Components) 结构及其内部使用的第三方库。 --- #### 方法三:手动添加全局声明 当自动检测失败时,可以在项目根目录下的 `shims-vue.d.ts` 文件中显式声明 Element-UI 的组件。例如: ```typescript declare module 'element-ui' { const components: any; export default components; } ``` 这样做的目的是让 TypeScript 明确知道如何处理来自 `element-ui` 的导入语句。 --- #### 方法四:更新 Webpack 配置 有时需要修改 Webpack 的加载规则才能使 HTML 提示生效。编辑 `webpack.config.js` 并加入以下片段: ```javascript module.exports = { resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js', '@': path.resolve(__dirname, './src'), }, extensions: ['.js', '.vue', '.json'] } }; ``` 该配置允许 Webpack 正常解析 `.vue` 文件内的模板语法[^3]。 --- #### 方法五:清理 Node Modules 和 Cache 最后一步也是最基础的一环——删除现有的 `node_modules` 文件夹和锁文件 (`package-lock.json`) 后再次初始化环境: ```bash rm -rf node_modules package-lock.json npm cache clean --force npm install ``` 这一过程能够移除潜在损坏的数据结构从而恢复正常的编译流程。 --- ### 总结 以上提到的方法涵盖了从软件层面到硬件层面上可能出现的各种状况及对应措施。实际应用过程中可以根据具体情况逐一排查直至找到根本原因所在。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值