当前位置: 移动技术网 > IT编程>脚本编程>vue.js > 荐 vue入门到精通

荐 vue入门到精通

2020年07月07日  | 移动技术网IT编程  | 我要评论

vue的优点:

轻量级框架
组件化
mvvm数据驱动型
双向数据绑定

对 MVVM 的理解

Model:代表数据模型,数据和业务逻辑都在Model层中定义
View:代表UI视图,负责数据的展示
ViewModel:就是与界面(view)对应的Model
model和view没有直接关联,通过ViewModel来进行关联,让model和view有双向数据绑定的联系

vue常用的指令

v-if v-show 显示/隐藏
v-for 循环
v-bind 动态绑定属性
v-on 绑定事件
v-model 双向数据绑定
v-once 只绑定一次

vue常用的修饰符

.stop 等同于JavaScript中的event.stopPropagation(),防止事件冒泡
.prevent 同于JavaScript中的event.preventDefault(),防止执行预设的行为
.once 只会触发一次。
.number 获取input里面的值转换为number
.enter 按下回车键触发

computed和watch的不用运用场景

字面意思computed是数据改变计算时使用的,比如商品结算
watch是数据改变触发逻辑,比如搜素功能

v-show和v-if的区别

v-show本质就是通过控制css中的display设置为none,控制隐藏,只会编译一次
v-if是动态的向DOM树内添加或者删除DOM元素,若初始值为false,就不会编译了
而且v-if不停的销毁和创建比较消耗性能。
总结:如果要频繁切换某节点,使用v-show。反之则用v-if。

为何在v-for使用key

必须用 key , 且不能是 index 和 random
通过key来判断是否是同一个节点
减少渲染次数,提升性能

vue的生命周期

beforeCreate 实例创建前
created 实例创建后
beforeMount 实例挂载前
mounted 实例挂载后
beforeUpdate 更新前
updated 更新后
beforeDestroy 销毁前
destroyed 销毁后

Vue 组件如何通信

父组件向子组件通信通过 porps
子组件向父组件通信通过 this.$emit
非父子组件通讯通过 vuex

描述组件渲染和更新的过程

初次渲染过程

解析模板为 render 函数 (或在开发环境已完成,vue-loader)
触发响应式,监听 data 属性 getter、 setter
执行 render 函数,生成 vnode ,patch(elem,vnode)

更新过程

修改 data,触发 setter(此前在 getter 中已被监听)
重新执行 render 函数,生成 newVnode
patch(vnode,newVnode)

双向数据绑定 v-model 的实现原理

input 元素的 value = this.name
绑定 input 事件 this.name = $event.target.value

Vue中双向数据绑定是如何实现的

通过Object.defineProperty数据劫持,然后通过里面的getter和setter来实现双向数据绑定。

为何组件 data 必须是一个函数

这不是vue相关的问题,而是js方面的问题。vue 文件编译之后实际上是 class,是一个类。而对组件使用的时候,相当于对组件进行了实例化。如果 data 不是一个函数的话,那每一个组件实例就共享了,就会造成数据污染问题。而函数的话,就会形成闭包,保护变量,不会造成影响。

ajax 请求应该放在哪个生命周期

放在mounted里
JS 是单线程的,ajax 异步获取数据

Vuex 中 action 和 mutation 的区别

action中处理异步,mutation是同步
mutation 每次就做一个操作
action 可以执行 mutation

vue-router 的导航钩子

全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。
组件内的钩子
单独路由独享组件

vuex的属性

state 存放vuex数据
mutation 同步的方法
action 像一个装饰器,包裹mutations,使之可以异步
getters 计算属性
modeles 模块化

vue 常见性能优化方式

合理的使用v-if和v-show
合理是同computed
使用v-for时加key,避免和v-if一起使用
合理使用异步组件
data 层级不要太深
使用 vue-loader 在开发环境做模板编译(预编译)

开启 gzip 压缩

安装 compression-webpack-plugin

cnpm i compression-webpack-plugin -D

在 vue.congig.js中引入并修改 webpack配置:

const CompressionPlugin = require('compression-webpack-plugin')

configureWebpack: (config) => {
   if (process.env.NODE_ENV === 'production') {
       // 为生产环境修改配置...
       config.mode = 'production'
       return {
           plugins: [new CompressionPlugin({
               test: /\.js$|\.html$|\.css/, //匹配文件名
               threshold: 10240, //对超过10k的数据进行压缩
               deleteOriginalAssets: false //是否删除原文件
           })]
       }
   }
}

在服务器我们也要做相应的配置,如果发送请求的浏览器支持 gzip,就发送给它 gzip格式的文件,我的服务器是用 express框架搭建的
只要安装一下 compression就能使用

//注意,要放在所有其他中间件注册之前
const compression = require('compression')
app.use(compression())

Webpack 对图片进行压缩

安装 image-webpack-loader

npm install image-webpack-loader --save-dev

在 webpack.base.conf.js 中进行配置

// vue.config.js
module.exports = {
    chainWebpack: config => {
        config.module
            .rule('images')
            .use('image-webpack-loader')
            .loader('image-webpack-loader')
            .options({
                bypassOnDebug: true
            })
            .end()
    }
}

本文地址:https://blog.csdn.net/weixin_45292658/article/details/107149753

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网