当它们处于同一节点,v-for 的优先级比 v-if 更高。css
keep-alive:主要用于保留组件状态或避免从新渲染。两个重要属性,include 缓存组件名称,exclude 不须要缓存的组件名称。html
v-if 和 v-show 均可以用来动态显示DOM元素。前端
v-on 能够监听多个方法,可是同一种事件类型的方法,v-on 只能监听一个。vue
用于 管理可复用的元素。由于Vue 会尽量高效地渲染元素,一般会复用已有元素而不是从头开始渲染。当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。若是数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每一个元素,而且确保它在特定索引下显示已被渲染过的每一个元素。key的做用主要是为了高效的更新虚拟DOMjava
官方解释:在下次 DOM 更新循环结束以后执行延迟回调。在修改数据以后当即使用这个方法,获取更新后的 DOM。简单的说就是再DOM操做时,vue的更新是异步的,$nextTick 是用来知道何时 DOM 更新完成的。 举例:咱们给一个div设置显示隐藏,当点击 button 的时候 #textDiv 先是被渲染出来,接着咱们获取 #textDiv 的 html内容node
<div id="app">
<div id="textDiv" v-if="isShow">这是一段文本</div>
<button @click="getText">获取div内容</button>
</div>
<script>
var app = new Vue({
el : "#app",
data:{
isShow: false
},
methods:{
getText:function(){
this.isShow= true;
var text = document.getElementById('textDiv').innnerHTML;
console.log(text);
}
}
})
</script>
复制代码
这段代码表面上看不会有问题,但实际上点击报错,提示获取不到div元素,这里就涉及到 Vue 异步更新队列。python
Vue 执行 DOM 更新时,只要观察到数据变化,就会自动开启一个队列,并缓冲在同一个事件循环中发生的因此数据改变。在缓冲时会去除重复数据,从而避免没必要要的计算和 DOM 操做。以上面的代码举例,你用一个 for 循环来动态改变 isShow 100 次,其实它只会应用最后一次改变,若是没有这种机制,DOM 就要重绘 100 次,这当然是一个很大的开销。因此执行 this.isShow= true时,#textDiv 尚未被建立出来,直到下一个 Vue 事件循环时,才开始建立。 上面的代码应修改成:webpack
getText:function(){
this.showDiv = true;
this.$nextTick(function(){
var text = document.getElementById('div').innnerHTML;
console.log(text);
});
}
复制代码
组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让咱们可使用独立可复用的小组件来构建大型应用,任意类型的应用界面均可以抽象为一个组件树ios
组件 diyHeader.vuec++
<template>
<div>
<div id="header" @click="fun"></div>
</div>
</template>
<script>
export default {
methods:{
fun(){
alert(1);
}
}
}
</script>
<style>
#header{
height: 100px;
background: red;
}
</style>
复制代码
util下components.js
import DiyHeader from "../components/diyHeader.vue"
export default (Vue)=>{
Vue.component("DiyHeader", DiyHeader)
}
复制代码
main.js
import components from "./util/components"
Vue.use(components);
复制代码
以后就能够直接在项目中使用 DiyHeader 这个组件
在页面里导入组件而后放到components中就可使用了
import DiyHeader from "../components/diyHeader.vue"
export default {
name: "App",
components: { DiyHeader },
}
复制代码
directives.js
export default (Vue)=>{
Vue.directive("focus", {
inserted: function (el) {
el.focus();
}
})
}
复制代码
main.js
import directives from '@/utils/directives.js'
Vue.use(directives
复制代码
vue 的生命周期是: vue 实例从建立到销毁,也就是从开始建立、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程。
在实例初始化以后,数据观测 (data observer) 和 event/watcher 事件配置以前被调用。
在实例建立完成后被当即调用。在这一步,实例已完成如下的配置:数据观测 (data observer), 属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
在挂载开始以前被调用:相关的 render 函数首次被调用。
el 被新建立的 vm.el 也在文档内。
数据更新时调用,发生在虚拟 DOM 打补丁以前。这里适合在更新以前访问现有的 DOM,好比手动移除已添加的事件监听器。该钩子在服务器端渲染期间不被调用,由于只有初次渲染会在服务端进行。
因为数据更改致使的虚拟 DOM 从新渲染和打补丁,在这以后会调用该钩子。
keep-alive 组件激活时调用。该钩子在服务器端渲染期间不被调用。
keep-alive 组件停用时调用。该钩子在服务器端渲染期间不被调用。
实例销毁以前调用。在这一步,实例仍然彻底可用。该钩子在服务器端渲染期间不被调用。
Vue 实例销毁后调用。调用后,Vue 实例指示的全部东西都会解绑定,全部的事件监听器会被移除,全部的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子能够返回 false 以阻止该错误继续向上传播。
就是只有一张Web页面的应用。单页应用程序 (SPA) 是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的 Web 应用程序。浏览器一开始会加载必需的 HTML、CSS 和 JavaScript,全部的操做都在这张页面上完成,都由 JavaScript 来控制。所以,对单页应用来讲模块化的开发和设计显得至关重要。
采用数据劫持结合发布者-订阅者模式的方式,经过Object.defineProperty()来劫持各个属性的setter,getter,在数据变更时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来做为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,可是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。
vue-router 模块 的router-link组件
Vuex 是一个专为 Vue.js 应用程序开发的状态管理器,采用集中式存储管理应用的全部组件的状态,主要是为了多页面、多组件之间的通讯。 Vuex有5个重要的属性,分别是 State、Getter、Mutation、Action、Module,由 view 层发起一个 Action 给 Mutation,在 Mutation 中修改状态,返回新的状态,经过 Getter暴露给 view层的组件或者页面,页面监测到状态改变因而更新页面。若是你的项目很简单,最好不要使用 Vuex,对于大型项目,Vuex 可以更好的帮助咱们管理组件外部的状态,通常能够运用在购物车、登陆状态、播放等场景中。
$route是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。而$router是“路由实例”对象包括了路由的跳转方法,钩子函数等
答:MVVM是是Model-View-ViewModel的缩写,Model表明数据模型,定义数据操做的业务逻辑,View表明视图层,负责将数据模型渲染到页面上,ViewModel经过双向绑定把View和Model进行同步交互,不须要手动操做DOM的一种设计思想。
答:在router目录下的index.js文件中,对path属性加上/:id。 使用router对象的params.id
经过用window.location.hash监听页面的hash值变化,切换对于的内容,hash变化不会重载页面。
history采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()能够对浏览器历史记录栈进行修改,以及popState事件的监听到状态变动。
minix(混入) 是 Vue 中的高级用法,混入 (mixin) 提供了一种很是灵活的方式,来分发 Vue 组件中的可复用功能。好比咱们作一个下拉加载,不少组件都须要用到下拉加载,咱们就能够把下拉加载封装成一个minix,而后须要下拉加载功能的页面都去导入这个minix,minix里面的属性或者方法就会被混合到当前组件自己的属性上。简单的说,minix B 有个 C方法(下拉加载),页面 A 须要下拉加载因而就导入了 minix B,这时候页面 A 也就拥有了 C 方法。若是页面 A 自己有个 D方法,这时页面 A 就会既有 C 方法也有自己的 D 方法。
Vue.use() 是Vue的一个全局注册方法,主要用来注册插件,默认第一个参数是它接受的参数类型必须是Function或者是Object,若是是个对象,必须提供install方法,install方法默认第一个参数为 Vue,其后的参数为注册时传入的arguments。若是是 Function 那么这个函数就被当作 install 方法。同一个插件 Vue.use 会自动阻止屡次注册。除了在注册插件中使用 Vue.use 外,咱们还能够在 directive注册、filters注册、components注册等条件下使用。 有的时候咱们会遇到某些时候引入插件是并无使用 Vue.use ,好比使用 axios 的时候,缘由是 axios 没有 install 方法,因此也就不须要使用 Vue.use 来全局注册。
欢迎你们关注个人我的公众号,互联网码农,专一互联网编程技术分享,关注公众号,回复关键字,能够领取系列编程学习视频哦,前端、java、ios、安卓、c++、python应用尽有。