值得分享的vue

187 阅读1分钟

1、vue中修饰符的使用

1.1、' on'修饰符

        <div @click="click('click parent')">
            parent
            <div @click="click('click child')">
                child
                <div @click="click('click son')">
                    son
                </div>
            </div>
        </div>
        //点击 son 触发顺序 son --- child ---- parent 
        //vue默认事件冒泡。

1.2、'. stop'修饰符

阻止事件向上传递。
适用场景:不想触发上级事件。

    //如想在点击 son 的时候 不想触发 child parent 的事件。
       <div @click="click('click parent')">
            parent
            <div @click="click('click child')">
                child
                <div @click.stop="click('click son')">
                    son
                </div>
            </div>
        </div>
         on: {
                  click: function($event) {
                  // 阻止事件冒泡
                    $event.stopPropagation()
                    return _vm.click("click son")
                  }
                }

1.3、'.prevent'修饰符

阻止一些DOM自带的功能事件
如:a跳转,button 提交 等...

        <div>
            <a href="www.baidu.com" target="_blank" @click.prevent>百度一下就入坑</a>
        </div>
        on: {
            click: function($event) {
              $event.preventDefault()
            }
          }

1.4、'.stop'修饰符

事件捕获,被绑定的父级事件,如果子触发了,必定先调用父级。
.stop也无法阻止。

      <div @click.capture="click('click parent')">
            parent
            <div @click="click('click child')">
                child
                <div @click.stop="click('click son')">
                    son
                </div>
            </div>
        </div>
        // 点击son 顺序 parent --- son

1.5、'.self'修饰符

事件触发首先判断是否自身。

            <div @click.self="click('click self parent')">
            parent
            <div @click="click('click child')">
                child
                <div @click="click('click son')">
                    son
                </div>
            </div>
            // 点击 parent 才会触发 事件
             on: {
                click: function($event) {
                // 里面做了是否自身的比较
                        if ($event.target !== $event.currentTarget) {
                            return null
                        }
                    return _vm.click("click self parent")
                }
            }

1.6、'. native'修饰符

官网的解释:在某个组件的根元素上监听一个原生事件。可以使用 v-on 的修饰符 .native 。

通俗点讲:native 一定是用于自定义组件,也就是自定义的html标签

<body>
    <div id="app">
        <div class="box" >
            <Son @click='handler1'></Son>
        </div>
    </div>
</body>
<script> export default {
   methods: {
     handler1() {
       // 不触发
     }
   }
 }
</script>

<body>
    <div id="app">
        <div class="box" >
            <Son @click.native='handler2'></Son>
        </div>
    </div>
</body>
<script> export default {
   methods: {
     handler2() {
       // 触发
     }
   }
 }
</script>

2、keep-alive的声明周期执行

  • 页面第一次进入,钩子的触发顺序
    created-> mounted-> activated
    退出时触发 deactivated 当再次进入(前进或者后退)时,只触发 activated
  • 事件挂载的方法等,只执行一次的放在 mounted 中;组件每次进去执行的方法放在 activated 中;
<!--被keepalive包含的组件会被缓存-->
<keep-alive>
    <component><component />
</keep-alive>

参数理解

keepalive 可以接收3个属性做为参数进行匹配对应的组件进行缓存:

  • include 包含的组件(可以为字符串,数组,以及正则表达式,只有匹配的组件会被缓存)

  • exclude 排除的组件(以为字符串,数组,以及正则表达式,任何匹配的组件都不会被缓存)

  • max 缓存组件的最大值(类型为字符或者数字,可以控制缓存组件的个数)

注:当使用正则表达式或者数组时,一定要使用 v-bind

<!-- 将(只)缓存组件name为a或者b的组件, 结合动态组件使用 -->
<keep-alive include="a,b">
  <component></component>
</keep-alive>

<!-- 组件name为c的组件不缓存(可以保留它的状态或避免重新渲染) -->
<keep-alive exclude="c"> 
  <component></component>
</keep-alive>

<!-- 使用正则表达式,需使用v-bind -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

<!-- 动态判断 -->
<keep-alive :include="includedComponents">
  <router-view></router-view>
</keep-alive>

<!-- 如果同时使用include,exclude,那么exclude优先于include, 下面的例子只缓存a组件 -->
<keep-alive include="a,b" exclude="b"> 
  <component></component>
</keep-alive>

<!-- 如果缓存的组件超过了max设定的值5,那么将删除第一个缓存的组件 -->
<keep-alive exclude="c" max="5"> 
  <component></component>
</keep-alive>

使用 meta 属性

优点:不需要例举出需要被缓存组件名称 使用$route.meta的keepAlive属性:

<keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

3、router的使用规范

不要直接写path,万一路由路径改了,代码都得改,用name,便于维护

this.$router.push({
  name: 'myUser',
  params: {},
  query: {}
})

作者:Oliver556
链接:juejin.cn/post/684490…

4、过滤器

const filters = this.$options.filters // js中使用