vue项目遇到的一些自己觉得值得记下的点

323 阅读4分钟

vue设置页面返回 返回页面不刷新,即保留缓存

**keep-alive。1可以利用include,exclude属性2利用meta属性**<br>
**activated,deactivated这两个生命周期函数一定是要在使用了keep-alive组件后才会有的,否则则不存在**<br>
**生命周期执行顺序**<br>
**1.不使用keep-alive的情况:beforeRouteEnter --> created --> mounted --> destroyed**<br>
**2.使用keep-alive的情况:beforeRouteEnter --> created --> mounted --> activated --> deactivated**<br>
**3.使用keep-alive,并且再次进入了缓存页面的情况:beforeRouteEnter -->activated --> deactivated**<br>
**在进入list页面后,activated生命周期中设置滚动距离。具体代码视页面HTML结构决定。**
**短板:这种方式仅适用于使用vue-router路由的项目。对于多页面的解决方案,目前没有想到好的解决方法。**<br>
**如<keep-alive>包裹两个组件:组件A和组件B。当第一次切换到组件A时,组件A的created和activated生命周期函数都会被执行,这时通过点击事件改变组件A的文字的颜色,在切换到组件B,这时组件A的deactivated的生命周期函数会被触发;在切换回组件A,组件A的activated生命周期函数会被触发,但是它的created生命周期函数不会被触发了,而且A组件的文字颜色也是我们之前设置过的。**

转自:blog.csdn.net/Chenming_32…

css实现div的高度填满剩余空间

**高度自适应问题,我很抵触用js去解决,因为不好维护,也不够自然,**
#nav {
    background-color: #85d989;
    width: 100%;
    height: 50px;
}
#content {
    background-color: #cc85d9;
    width: 100%;
    position: absolute;
    top: 50px;
    bottom: 0px;
    left: 0px;
}

动态参数

从 2.6.0 开始,可以用方括号括起来的 JavaScript 表达式作为一个指令的参数

🌰

<a v-bind:[attributeName]="url"> ... </a>

当对应示例里data里有一个属性attributeName,并且其值是"href",最终就会等价于v-bind:href="url"

<a v-on:[eventName]="doSomething"> ... </a>

同样地,当 eventName 的值为 "focus" 时,v-on:[eventName] 将等价于 v-on:focus
动态参数值的约束,动态参数预期会求出一个字符串,异常情况下值为null,null值可以被显性的用于移除绑定,除此之外,任何其他非字符串类型的都会触发一个警告

FormData 对象的使用,,,

1.用一些键值对来模拟一系列表单控件:即把form中所有表单元素的name与value组装成

let formData = new FormData()
formData.append('user', 'zhang')
获取 formData.get('user')  //zhang
删除 formData.delete('user')

2.使用FormData对象发送文件

  • Vue处理边界之root、parent、$refs(即父子组件间互相调用对方实例内部的属性和方法)
    vue子组件可以通过root、parent属性访问父组件实例的属性和方法,但区别是如果存在多级子组件,通过parent 访问得到的是它最近一级的父组件,通过root 访问得到的是根父组件,refs通过在子组件标签定义 ref 属性,在父组件中可以使用refs 访问子组件实例
refView() {
    console.log(this.$refs.baseInput)
    this.$refs.baseInput.$el.focus()
}

关于vue v-for循环过滤filter

v-for="(supplierItem,i) of supplierCollectList.filter((supplierItem, i) => i < 5 ? supplierItem : false)"

关于vuex

参考链接:www.jianshu.com/p/2e5973fe1…

关于vue监听路由变化

方法一:通过watch;
方法二:vue-router 的钩子函数 beforeRouteEnter beforeRouteUpdate beforeRouteLeave

beforeRouteEnter (to, from, next) {
      // 在渲染该组件的对应路由被 confirm 前调用
      // 不!能!获取组件实例 `this`
      // 因为当钩子执行前,组件实例还没被创建
    },
    beforeRouteUpdate (to, from, next) {
      // 在当前路由改变,但是该组件被复用时调用
      // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
      // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
      // 可以访问组件实例 `this`
    },
    beforeRouteLeave (to, from, next) {
      // 导航离开该组件的对应路由时调用
      // 可以访问组件实例 `this`
    },

beforeRouteEnter 守卫不能访问this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。解决方法:你可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

beforeRouteEnter (to, from, next) {
  next(vm => {
    // beforeRouteEnter不能通过this访问组件实例,但是可以通过 vm 访问组件实例
    console.log(vm.demodata)   //vm.demodata即this.demodata
  })
}