1、MVVM开发模式的理解:
MVVM是指Model,View,ViewModel三者,也就是把MVC中的Controller演变为ViewModel
- Model:代表数据模型,数据和业务罗技都在Model层定义;
- View:代表UI视图层,负责的是数据的展示;
- ViewModel:监听的是Model中数据的改变且控制视图的更新,处理用户交互操作;
Model和View是没有联系的,它们是通过ViewModel进行联系的Model和ViewModel直接实现双向数据绑定的关系。
2、Vue中的指令:
v-if、v-show、v-for、v-html、v-on、v-model、v-text、v-bind
用法:
- v-if:判断
- v-show:显示或隐藏
- v-for:数据循环
- v-html:渲染html结点以及字符串
- v-on:绑定事件
- v-model:实现数据的双向绑定
- v-text:渲染字符串
- v-bind:绑定属性
3、v-if和v-show的区别:.
- v-show仅仅控制元素的控制显示方式,将display属性通过block和none来回切换;
- v-if:是条件渲染,控制DOM结点的存在与否
使用区别:v-show会在使用上更加节省使用上的开销;当只需要一次显示或隐藏式,使用v-if更加合理;
4、VUE生命周期:
vue生命周期是指实例在创建和销毁的过程,由多个事件钩子函数组成,主要是创建、挂载、更新、卸载;第一次页面加载会触发创建和挂载的四个钩子函数(beforCreate、created、beforMount、Mounted),其中DOM渲染在mounted中完成;
- beforCreate:在创建实例之前发生,是第一个钩子函数,在此阶段data、methouds、computed、watch上的方法和数据都不可以访问。
- created:在实例创建完成之后发生,在当前阶段已完成的数据可观测到
- beforMount:在挂载之前发生
- mounted:在挂载完成之后发生
- beforUpdate:发生在更新之前
- update:发生在更新完成之后
- beforDestory:发生在实例销毁之前
- destoryed:发生在实例销毁之后,
var vm = new Vue({
el: '#app',
data: {
str:'测试'
},
methods: {},
// vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。
// 加loading事件
beforeCreate() {
console.log("beforeCreate" + "------1");
},
// vue实例的数据对象data有了,$el还没有
// 结束loading、请求数据为mounted渲染做准备
created() {
console.log("created" + "-------2");
},
// vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换。
beforeMount() {
console.log("beforeMount" + "-------3");
},
// vue实例挂载完成,data.filter成功渲染
mounted() {
console.log("mounted" + "-------4");
},
// data更新前触发
beforeUpdate() {
console.log("beforeUpdate" + "-------5");
},
// data更新时触发
updated() {
console.log("updated" + "-------6");
},
// 组件销毁时触发
beforeDestroy() {
console.log("beforeDestroy" + "-------7");
},
// 组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在
destroyed() {
console.log("beforeDestroy" + "------app8");
},
});
5、让css只在当前组件起作用
在当前组件的style标签中添加scoped
6、vuex介绍
是vue框架中的状态管理器,在main.js中引入store;
vuex有5种属性:State、Getter、Mutation、Action、Module
- State:基本数据;
- Getter:从基本数据派生的数据;
- mutations:提交更改数据的方法,同步进行;
- actions:装饰器,包裹mutations,使其可以异步进行;
- modules:模块化Vuex
- actions去异步改变state的状态,mutations同步改变状态;
适用场景:登陆状态,组件之间的状态
7、Computed和Watch
computed叫做计算属性,而watch叫做侦听器。
computed:
- 是计算值,
- 应用:就是简化tempalte里面{{}}计算和处理props或$emit的传值
- 具有缓存性,页面重新渲染值不变化,计算属性会立即返回之前的计算结果,而不必再次执行函数
watch:
- 是观察的动作,
- 应用:监听props,$emit或本组件的值执行异步操作
- 无缓存性,页面重新渲染时值不变化也会执行
8、vue.js核心:
数据驱动和组件化
9、vue中组件传值方法
- 父组件与子组件传值:
父组件传给子组件:子组件通过props方法接受数据
子组件传给父组件:$emit方法传递参数
- 兄弟组件传值:
eventBus,相当于一个中转站,创建一个事件中心,用他来传递事件个接受事件。
10、vue双向绑定原理:
采用数据劫持结合发布者-订阅者的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动是发布消息给订阅者,触发相应的监听回调
11、vue-router:
(1)全局路由:主要由两种:前置守卫,后置守卫
前置守卫注册:beforeEach
const router = new VueRouter({ ... });
router.beforeEach((to, from, next) => {
// do someting
});
参数 to 、from 、next 分别的作用:
- to: Route,代表要进入的目标,它是一个路由对象;
- from: Route,代表当前正要离开的路由,同样也是一个路由对象;
- next: Function,这是一个必须需要调用的方法,而具体的执行效果则依赖 next 方法调用的参数;
(2)路由独享的钩子
(3)组件内的导航钩子
12、axios:
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,用于请求后台资源的模块
使用:
(1)安装:npm install axios -s
(2)在main.js中引入import axios from(axios)
(3)挂载到vue实例中 vue.prototype.$axios=asios
13、vue中常见的修饰符:
.once:只触发一次
.self:当事件发生在该元素本身(非子元素)时触发
.stop:阻止单机事件冒泡
.prevent:提交事件不在重载页面
.captrue:事件发生时调用
14、v-if和v-for优先级
在v-if和v-for一起使用时,v-for具有比v-if更高的优先级,如果需要同时使用,v-if应该放在最外层。
15、scss介绍
scss是预处理css,须先下载三个loader:css-loader,node-loader,sass-loader;
16、的作用
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。