当前位置:   article > 正文

Vue2中组件详解_vue 2 recommends using kebab-case for custom event

vue 2 recommends using kebab-case for custom event names.

目录

说明

组件的命名规则

全局注册

一、应用场景

二、注册方法

三、注意事项

局部注册

一、应用场景

二、注册方法

三、注意事项


说明

组件是可复用的 Vue 实例,注册方式有局部注册和全局注册

组件的命名规则

说组件注册之前先讲一下,vue中组件名的命名规则

        使用 kebab-case(字母全部小写,单词之间用-连接)

        使用 PascalCase(大驼峰命名,单词首字母大写且单词之间无间隔)

        请使用有意义的组件名,代码规范人人有责(手动狗头)

全局注册

  一、应用场景

   一次引用,多次使用,无需重复引入

   在应用多处都有同样的使用场景

  二、注册方法

   1、 Vue.component('组件名', 组件)

    toast组件

        

    main.js中注册

  1. import Vue from 'vue'
  2. import App from './App'
  3. import router from './router/routes';
  4. import ToastVue from './components/Toast';
  5. Vue.config.productionTip = false;
  6. Vue.component("ToastVue",ToastVue)
  7. new Vue({
  8. el: '#app',
  9. router,
  10. components: { App },
  11. template: '<App/>',
  12. })

   其他页面或组件中使用

  1. <template>
  2. <div>
  3. <ToastVue></ToastVue>
  4. <h2>欢迎页面</h2>
  5. </div>
  6. </template>

  三、注意事项

    全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生

局部注册

        未完待续

全局组件

 对于全局组件可以使用Vue.extend方法构造子类,并手动挂载使用,参数是一个包含   组件选项的对象

  1. // 创建构造器
  2. var Profile = Vue.extend({
  3. template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
  4. data: function () {
  5. return {
  6. firstName: 'Walter',
  7. lastName: 'White',
  8. alias: 'Heisenberg'
  9. }
  10. }
  11. })

 编写全局组件GlobleToast.vue

  1. <template>
  2. <div id="toast" v-show="isVisible">
  3. <h1>{{ message }}</h1>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name:"GlobleToast",
  9. data () {
  10. return {
  11. isVisible:false,
  12. message:"",
  13. delay:2000
  14. }
  15. },
  16. watch:{
  17. isVisible:function(newVisible){
  18. // 当delay时间内有多个Toast实例,则移除上一个
  19. if(!newVisible){
  20. if(this.toastTimer) clearTimeout(this.toastTimer);
  21. this.$destroy(true);
  22. this.$el.parentNode.removeChild(this.$el);
  23. }
  24. }
  25. },
  26. mounted(){
  27. if(this.delay > 0){
  28. // delay 时间过后销毁组件
  29. this.toastTimer = setTimeout(()=>{
  30. this.$destroy(true);
  31. this.$el.parentNode.removeChild(this.$el);
  32. },this.delay);
  33. }
  34. },
  35. }
  36. </script>
  37. <style>
  38. #toast{
  39. position: absolute;
  40. top: 50%;
  41. left: 50%;
  42. transform: translate(-50%,-50%);
  43. background: rgba(0, 0, 0, 0.7);
  44. color: #fff;
  45. border-radius: 30px;
  46. min-width: 160px;
  47. max-width: 300px;
  48. text-align: center;
  49. padding: 6px 10px;
  50. }
  51. </style>

   编写全局组件构造函数GlobleToast.js

  1. import Vue from "vue";
  2. import GlobleToast from './GlobleToast.vue';
  3. /**
  4. * 全局Toast组件
  5. * 多个Toat只显示最后一条
  6. * 默认显示时间为2S
  7. * @param message {String} 显示信息
  8. * @param delay {Number} 显示时间
  9. */
  10. // 构造Toast组件
  11. const ToastComponent = Vue.extend(GlobleToast);
  12. let instance;
  13. const Toast = function(message="",delay = 2000){
  14. // 防止加载多个实例
  15. if(instance){
  16. instance.isVisible = false;
  17. }
  18. // 实例化Toast组件,传入参数
  19. instance = new ToastComponent({
  20. data:{
  21. message,
  22. delay
  23. }
  24. });
  25. //手动挂载组件到指定元素上
  26. instance.$mount();
  27. document.body.appendChild(instance.$el);
  28. //更改组件状态为显示
  29. instance.isVisible = true;
  30. };
  31. export default GlobleToast;

添加GlobleToast到vue原型上,进行全局使用

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue';
  4. import App from './App';
  5. import GlobleToast from './components/GlobleToast/GlobleToast.js';
  6. import router from './router/routes';
  7. Vue.config.productionTip = false;
  8. //全局组件
  9. Vue.prototype.$globleToast = GlobleToast;
  10. /* eslint-disable no-new */
  11. new Vue({
  12. el: '#app',
  13. router,
  14. components: { App },
  15. template: '<App/>',
  16. })

代码地址

github:

        稍后添加

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/816631
推荐阅读
相关标签
  

闽ICP备14008679号