备忘录

作者: 唯轩_443e | 来源:发表于2017-12-30 20:59 被阅读0次
  • 页面自己调用自己时的方法
watch: {
  $route(val) {
    if (val.query.bookid) {
       this.init() // 自己调用自己,重新初始化
       this.$refs.scroll.scrollTo(0, 0, 0)
    }
  }
},

 // 离开路由钩子
    beforeRouteLeave(to, from, next) {
      // 在这里可以询问用户是否离开当前页面 是就 next()

      next() // 调用next() 路由就会跳转
    },
    // 重复调用组件的钩子
    beforeRouteUpdate(to, from, next) {
      next()
    },
  • mounted() 钩子执行的内容依赖 computed计算属性时 延迟20ms执行
setTimeout(() => {
  // 内容...
}, 20)
  • vue 生命周期
1、beforeCreate
在实例初始化之后,数据观测和event/watcher时间配置之前被调用

2. created
实例已经创建完成之后被调用。在这一步,实例已经完成以下的配置:数据观测,属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el属性目前不可见。
(不需要set 的属性可在这里定义)

3、beforeMount
在挂载开始之前被调用:相关的render函数首次被调用。
该钩子在服务器端渲染期间不被调用。

4、mounted
可以使用ref定义的钩子
该钩子在服务端渲染期间不被调用。
(用于请求数据)

5、beforeUpdate
数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前。
你可以在这个钩子中进一步第更改状态,这不会触发附加的重渲染过程。
该钩子在服务端渲染期间不被调用。

6、updated
由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件DOM已经更新,所以你现在可以执行依赖于DOM的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
该钩子在服务端渲染期间不被调用。

7、activated
keep-alive组件激活时调用
该钩子在服务器端渲染期间不被调用。
(如导航条可以滚动,那么可在该周期设置导航条位置)

8、deactivated
keep-alive组件停用时调用。
该钩子在服务端渲染期间不被调用。

9、beforeDestroy 
【类似于React生命周期的componentWillUnmount】
实例销毁之间调用。在这一步,实例仍然完全可用。
该钩子在服务端渲染期间不被调用。

10、destroyed
Vue实例销毁后调用。调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
该钩子在服务端渲染不会被调用。
  • <router-view/>
// keep-alive缓存组件 有2个属性
// include="name"   缓存所有name=name的组件
// exclude="name"  除了name 其他都缓存
<keep-alive exclude='detail'>
    <router-view class='child-view'></router-view>
</keep-alive>

使用include/exclude 属性需要给所有vue类的name赋值
(注意不是给route的name赋值   不生效)
是组件里的name
  • 移动web 性能优化

    1. 要减少对DOM的操作
    2. 尽量缓存可以缓存的数据
    3. 尽量使用transform 动画 代替DOM操作
    4. 不要给非statice定位元素加css3动画,(如absolute、relative),原因:会成倍增加性能开销
    5. 适当使用硬件加速(使用canvas、或添加transform: translate3d(0,0,0)会触发硬件加速)
  • window.performance.timing

页面加载速度 的时间戳
  • props 里 设置数组默认值时 要这样
 props: {
      searches: {
        type: Array,
        default: () => []
      }
    },
  • Unable to preventDefault inside passive event listener due to target being treated as passive.
*            //css里加上这个 即可没有警告提示
  touch-action: none  
  • vue data() {} 里定义的属性有get、set
    reated() {} 里定义的属性只有get

  • 新版vue-cli中使用dev-server代理的方法

在webpack.dev.config.js中
// 1.引包
const axios = require('axios');
const express = require('express');
const apiRoutes = express.Router();

// 2.配置
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({sourceMap: config.dev.cssSourceMap, usePostCSS: true})
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in      /config/index.js
devServer:{
//在这里添加一个before方法  上面的都是自带的
before(apiRoutes){
  apiRoutes.get('/api/getDiscList',(req,res)=>{
    const url = '这里是要链接的api地址';
    axios.get(url, {
      headers: {
        referer: '配置api地址referer',
        host: '配置api地址host'
      },
      params: req.query  //这是请求的query 
    }).then((response) => {
    //response是api地址返回的,数据在data里。
      res.json(response.data)
    }).catch((e) => {
      console.log(e);
    })
  });
  // app.use('/api', apiRoutes);
 }
}
  • this.$nextTick()

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

  1. created()钩子函数执行DOM操作要放在nextTick()里,因为 created时DOM 其实并未进行任何渲染
  2. 在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进Vue.nextTick()的回调函数中。意思是在$nextTick里的操作,会等待vue根据数据变化更新完DOM后再执行.
  • 使用rem自适应布局时,如果要操作DOM,和获取元素width、height,那么被操作的元素width、height属性必须是整数如3rem

  • 获取dom元素相对于页面位置属性dom.

// 属性用x, y, right, left, bottom, top, width, height
dom.getBoundingClientRect()
// vue
this.$refs.元素.getBoundingClientRect()

// dom.offsetTop 相对于父元素的top值
  • 获取触摸元素的位置属性e.touches[0]


  • 自适应rem要放在app的created()里面 页面才不会闪屏

created() {
 let html = document.getElementsByTagName('html')[0]
 setHTMLSize()
 window.onresize = () => setHTMLSize()
 function setHTMLSize () {
  let width = window.innerWidth || document.body.clientWidth
  if (width > 640) {
    width = 640
  }
  html.style.fontSize = width / 160 * 4.4 + `px`
 }
}
  • sass引入字体文件url不能换行
@font-face
  font-family: 'music-icon'
  src: url('../fonts/music-icon.eot?2qevqt')
  src: url('../fonts/music-icon.eot?2qevqt#iefix') format('embedded-opentype'),url('../fonts/music-icon.ttf?2qevqt') format('truetype'),url('../fonts/music-icon.woff?2qevqt') format('woff'),url('../fonts/music-icon.svg?2qevqt#music-icon') format('svg')
  • 路由选中页面自动加.router-link-active

  • 可以在根目录package.json安装的需要库

//添加库名: 版本 然后cnpm install安装
"dependencies": {
    "babel-runtime": "^6.0.0", // 转义ES6语法
    "vue": "^2.5.2",
    "vue-router": "^3.0.1",
    "fastclick": "^1.0.6",  // 点击无300ms延迟
    "jsonp": "^0.2.1"  // jsonp跨域
  },
  • 对url进行编码encodeURIComponent(val)
  • Object.assign 合并对象

Object.assign(target,... sources)
目标对象、源对象
将所有可枚举属性的值从一个或多个源对象复制到目标对象。后面的值会覆盖前面相同的值,
它会返回目标对象。

相关文章

网友评论

      本文标题:备忘录

      本文链接:https://www.haomeiwen.com/subject/fvpngxtx.html