anyxl / vuequestion Goto Github PK
View Code? Open in Web Editor NEWVueQuestion
VueQuestion
vue的双向绑定,分为两个方向:
Vue提供了Vue.extend方法用于在扩展组件构造器,以及extends选项用于扩展单文件组件。
extends允许声明扩展另一个组件(可以是一个简单的选项对象或构造函数),而无需使用 Vue.extend。通过外部增加对象的形式,对构造器进行扩展。它和混入mixins非常的类似。只不过接收的参数是简单的选项对象或构造函数,所以extends只能单次扩展一个组件。
var baseComp = {
name: 'baseComp',
template: <div>{{message}}</div>
,
data () {
return {
message: 'My is BaseComponent!'
}
}
}
var app = new Vue({
el: '#app',
data: {},
extends: baseComp
})
一、MVC 架构
Model: 数据模型层,保存数据;
View: 视图层,展示用户界面;
Controller: 控制层,处理业务逻辑;
二、MVP 架构
该模式是MVC的一个变种;Model和View层与MVC相同;
Presenter: 可以理解成松散的控制器,其中包括了视图的UI业务逻辑,所有从视图发出的事件,都会通过代理给Presenter进行处理;同时,Presenter也通过视图暴露的接口与其进行通信;
三、MVVM 架构
Model和View层与MVC和MVP相同;
ViewModel: 类似于MVP的Presenter,区别在于,它采用双向绑定,当view变动,会自动反映在ViewModel,反之亦然。
v-for的优先级更高,两者不建议在同一元素上使用;
当两者同时出现,
1.应将v-if写在父级元素上,
2.使用计算属性computed过滤循环数据。
vue生命周期,指vue实例从初始化到销毁的过程。
每个 Vue 实例在被创建时都要经过一系列的初始化过程,在某个时刻自动执行的函数,叫做生命周期函数(钩子函数)。例如,设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等过程中会运行一些生命周期钩子函数。
不同阶段执行的钩子函数:
watch 与 compute 区别:
watch和computed各自擅长处理的数据关系场景不同:
v-for和v-if不要放在同一个元素上使用,可以使用计算属性computed过滤数据;
如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好;
将组建拆分成不同小组件,加快更新渲染速度;
组件的按需加载;
路由懒加载;
减少watch的使用;
$nextTick:将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。
原理:
Vue 在观察到数据变化时是异步执行的,并不是直接更新 DOM,而是将这些操作都缓存在一个队列,在一个事件循环结束之后,刷新队列,统一执行dom更新操作。所以当需要操作更新后的dom时,会发现获取不到。
所以,可以在数据变化之后使用 Vue.nextTick(callback),callback回调函数将在 DOM 更新完成后被调用。 Vue 会根据当前浏览器环境优先使用原生的 Promise.then 和 MutationObserver,如果都不支持,就会采用 setTimeout 代替,达到延迟函数到 DOM 更新后再使用的目的。
diff算法写在vue的patch.js内,用来比较真实dom和虚拟dom的差异,找出需要更新的节点,便于更高效的修改dom。
diff算法通过真实dom和虚拟dom同层级节点首首比较,尾尾比较,交叉比较以及key值查找,找出差异:
组件是可以在它们自己的模板中调用自身的,不过它们只能通过 name 选项来做这件事。另外需要注意的是:必须设置结束条件,不能无限递归,否则会内存溢出“max stack size exceeded”。应用于一些树状菜单等。
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
对于一些vue大型项目,vuex的使用,非常利于管理多组件间的数据通讯和外部数据状态,比如登录信息,数据字典等。
使用步骤:
核心概念:
组件实例的作用域都是独立的,这意味着不能在某组件的模板内直接引用其他组件的数据,vue的组件通信解决这个问题。一般分为三种通信方式:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.