vue中怎么使用svg封装全局消息提示组件

发布时间:2022-04-18 13:36:15 作者:iii
来源:亿速云 阅读:249

Vue中怎么使用SVG封装全局消息提示组件

在现代前端开发中,消息提示组件是一个常见的需求。无论是成功提示、错误提示还是警告提示,都需要一个统一的、可复用的组件来实现。本文将详细介绍如何在Vue中使用SVG图标封装一个全局的消息提示组件,并实现全局调用。

1. 项目初始化

首先,我们需要创建一个Vue项目。如果你还没有安装Vue CLI,可以通过以下命令进行安装:

npm install -g @vue/cli

然后,创建一个新的Vue项目:

vue create vue-svg-message

在项目创建过程中,选择默认配置即可。项目创建完成后,进入项目目录:

cd vue-svg-message

2. 安装SVG图标库

为了使用SVG图标,我们可以选择一些开源的SVG图标库,比如Font Awesome或者Feather Icons。这里我们选择使用Feather Icons。

首先,安装Feather Icons:

npm install feather-icons

3. 创建全局消息提示组件

接下来,我们创建一个全局的消息提示组件。在src/components目录下创建一个名为Message.vue的文件:

<template>
  <div class="message" :class="type">
    <div class="icon">
      <svg
        v-if="type === 'success'"
        xmlns="http://www.w3.org/2000/svg"
        width="24"
        height="24"
        viewBox="0 0 24 24"
        fill="none"
        stroke="currentColor"
        stroke-width="2"
        stroke-linecap="round"
        stroke-linejoin="round"
      >
        <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
        <polyline points="22 4 12 14.01 9 11.01"></polyline>
      </svg>
      <svg
        v-else-if="type === 'error'"
        xmlns="http://www.w3.org/2000/svg"
        width="24"
        height="24"
        viewBox="0 0 24 24"
        fill="none"
        stroke="currentColor"
        stroke-width="2"
        stroke-linecap="round"
        stroke-linejoin="round"
      >
        <circle cx="12" cy="12" r="10"></circle>
        <line x1="12" y1="8" x2="12" y2="12"></line>
        <line x1="12" y1="16" x2="12" y2="16"></line>
      </svg>
      <svg
        v-else-if="type === 'warning'"
        xmlns="http://www.w3.org/2000/svg"
        width="24"
        height="24"
        viewBox="0 0 24 24"
        fill="none"
        stroke="currentColor"
        stroke-width="2"
        stroke-linecap="round"
        stroke-linejoin="round"
      >
        <path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>
        <line x1="12" y1="9" x2="12" y2="13"></line>
        <line x1="12" y1="17" x2="12" y2="17"></line>
      </svg>
    </div>
    <div class="content">
      <p>{{ message }}</p>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: 'success',
      validator: (value) => ['success', 'error', 'warning'].includes(value),
    },
    message: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.message {
  display: flex;
  align-items: center;
  padding: 10px;
  border-radius: 4px;
  margin-bottom: 10px;
}

.message.success {
  background-color: #e6ffed;
  border: 1px solid #b7eb8f;
}

.message.error {
  background-color: #fff1f0;
  border: 1px solid #ffa39e;
}

.message.warning {
  background-color: #fffbe6;
  border: 1px solid #ffe58f;
}

.icon {
  margin-right: 10px;
}

.icon svg {
  width: 20px;
  height: 20px;
}

.content p {
  margin: 0;
}
</style>

在这个组件中,我们定义了三种类型的消息提示:successerrorwarning。每种类型对应不同的SVG图标和样式。

4. 创建全局消息提示插件

为了能够在全局范围内调用消息提示组件,我们需要创建一个Vue插件。在src/plugins目录下创建一个名为message.js的文件:

import Vue from 'vue';
import Message from '@/components/Message.vue';

const MessagePlugin = {
  install(Vue) {
    Vue.prototype.$message = function (options) {
      const MessageComponent = Vue.extend(Message);
      const instance = new MessageComponent({
        propsData: options,
      });
      instance.$mount();
      document.body.appendChild(instance.$el);

      setTimeout(() => {
        instance.$el.remove();
      }, 3000);
    };
  },
};

Vue.use(MessagePlugin);

在这个插件中,我们通过Vue.extend方法创建了一个Message组件的实例,并将其挂载到DOM中。然后,我们通过setTimeout方法在3秒后移除该组件。

5. 在项目中使用全局消息提示组件

现在,我们可以在项目的任何地方使用全局消息提示组件了。在src/main.js中引入我们刚刚创建的插件:

import Vue from 'vue';
import App from './App.vue';
import './plugins/message';

Vue.config.productionTip = false;

new Vue({
  render: (h) => h(App),
}).$mount('#app');

然后,在src/App.vue中使用全局消息提示组件:

<template>
  <div id="app">
    <button @click="showSuccessMessage">显示成功消息</button>
    <button @click="showErrorMessage">显示错误消息</button>
    <button @click="showWarningMessage">显示警告消息</button>
  </div>
</template>

<script>
export default {
  methods: {
    showSuccessMessage() {
      this.$message({
        type: 'success',
        message: '这是一个成功的消息提示!',
      });
    },
    showErrorMessage() {
      this.$message({
        type: 'error',
        message: '这是一个错误的消息提示!',
      });
    },
    showWarningMessage() {
      this.$message({
        type: 'warning',
        message: '这是一个警告的消息提示!',
      });
    },
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}

button {
  margin: 0 10px;
  padding: 10px 20px;
  font-size: 16px;
  cursor: pointer;
}
</style>

在这个例子中,我们创建了三个按钮,分别用于显示成功、错误和警告的消息提示。点击按钮时,会调用this.$message方法,显示相应的消息提示。

6. 样式优化

为了让消息提示组件更加美观,我们可以对样式进行一些优化。在src/components/Message.vue中,我们可以添加一些动画效果:

<style scoped>
.message {
  display: flex;
  align-items: center;
  padding: 10px;
  border-radius: 4px;
  margin-bottom: 10px;
  opacity: 0;
  transform: translateY(-20px);
  transition: opacity 0.3s ease, transform 0.3s ease;
}

.message.show {
  opacity: 1;
  transform: translateY(0);
}

.message.success {
  background-color: #e6ffed;
  border: 1px solid #b7eb8f;
}

.message.error {
  background-color: #fff1f0;
  border: 1px solid #ffa39e;
}

.message.warning {
  background-color: #fffbe6;
  border: 1px solid #ffe58f;
}

.icon {
  margin-right: 10px;
}

.icon svg {
  width: 20px;
  height: 20px;
}

.content p {
  margin: 0;
}
</style>

然后,在src/plugins/message.js中,我们可以在组件挂载后添加一个show类,触发动画效果:

import Vue from 'vue';
import Message from '@/components/Message.vue';

const MessagePlugin = {
  install(Vue) {
    Vue.prototype.$message = function (options) {
      const MessageComponent = Vue.extend(Message);
      const instance = new MessageComponent({
        propsData: options,
      });
      instance.$mount();
      document.body.appendChild(instance.$el);

      setTimeout(() => {
        instance.$el.classList.add('show');
      }, 10);

      setTimeout(() => {
        instance.$el.classList.remove('show');
        setTimeout(() => {
          instance.$el.remove();
        }, 300);
      }, 3000);
    };
  },
};

Vue.use(MessagePlugin);

7. 总结

通过以上步骤,我们成功地在Vue中使用SVG图标封装了一个全局的消息提示组件,并实现了全局调用。这个组件不仅支持多种类型的消息提示,还具有良好的动画效果。在实际项目中,你可以根据需求进一步扩展和优化这个组件,比如支持更多的消息类型、自定义显示时间等。

希望本文对你有所帮助,祝你在Vue开发中取得更多成果!

推荐阅读:
  1. vue如何实现消息提示全局组件
  2. vue中如何使用svg实现评分显示组件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue svg

上一篇:Android中如何实现切面编程

下一篇:mongodb数据块怎么迁移

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》