VUE杂记

248 阅读1分钟

$set

当数据是从 created 的生命周期中获取,会给数据身上绑定 getter/settet 的方法。
这是数据动态进行改变的前提,但当数据没有从这里面获取,想给属性设置 getter/setter 可以使用 $set 设置。

数组
    this.$set( Array, index, newValue )
对象
    this.$set( Object, key, newValue )

有时在数据深层次中,使用直接赋值会无法成功赋值,这时可以使用 $set 进行赋值。

利用 keep-alive 后退不刷新,前进刷新

keep-alive 包裹的组建或者路由可以使它进入缓存状态,可以利用这个机制做一个后退页面后不刷新。
在项目上有时遇到通过搜索等条件,查询到数据后,进行更改,更改完成后返回的还是刚开始搜索时的页面。
数据刷新,通过$emit来触发组件内的数据条件,即可刷新数据

//App.vue

<keep-alive :include="keepAliveComponents">
    <router-view></router-view>
</keep-alive>

//初始需要缓存的页面
data (){
    return {
        keepAliveComponents:['index']   //index为组件的名称,export default{ name: 'index' } 
    }
}

//监听路由,当路由进入index或者list时,index进行缓存,当进入其他路由时,index不进行缓存
watch: {
    '$route' (to, from){
        if(['Index', 'List'].includes(to.name)) {
            this.keepAliveComponents = ['index'];
        } else {
            this.keepAliveComponents = [];
        }
    }
}

include:字符串或正则表达式,只有名称匹配的组件会被缓存;
exclude :字符串或正则表达式,任何名称匹配的组件都不会被缓存;
max:数字,最多可以缓存多少组件实例;

//router.js

import Index from './Index';
import List from './List';

routes: [
    {
        path: '/index',
        name: 'Index',
        components: 'Index' //或者 components:() => import('./Index')
    },
    {
        path: '/list',
        name: 'List',
        components: 'List' //或者 components:() => import('./List')
    }
]

持续更新中~~