Vue组件中data一定要是一个函数?因为一个组件可以共享,但是它们的数据是私有的,所以每个组件都必须返回一个新的数据对象,返回一个唯一的对象,并且不与其他组件共享一个对象。注册组件的本质是创建对组件构造函数的引用。使用组件实际上就是创建一个组件实例。因此,注册一个组件实际上并没有创建一个新的组件类,而是一种可以实例化它的新方法。varMyComponent=function(){}MyComponent.prototype.data={a:1,b:2,}上面是一个虚拟的组件构造器,还有很多真实的组件构造器方法varcomponent1=newMyComponent()varcomponent2=newMyComponent()上面实例化了两个组件实例,也就是调用component1.data.a创建的两个实例===component2.data.a//truecomponent1.data.b=5component2.data.b//5即可看上面代码最后三句,相当坑爹。如果两个实例同时引用一个对象,当你修改其中一个属性时,另一个实例也会被修改。怎么会这样,这两个实例应该有自己的域。因此需要通过如下方法处理:varMyComponent=function(){this.data=this.data()}MyComponent.prototype.data=function(){return{a:1,b:2,}}这样每个实例的数据属性都是独立的,不会互相影响。所以,你现在知道为什么vue组件的数据必须是函数了吧。这都是js本身的特性造成的,与vue本身的设计无关。keep-alive组件在vuekeep-alive中的作用:主要用来保持组件状态或者避免重新渲染。1.属性:包括:字符串或正则表达式。只有匹配的组件才会被缓存。排除:字符串或正则表达式。任何匹配的组件都不会被缓存。2.用法:当包装动态组件时,不活动的组件实例被缓存而不是被销毁。与类似,是一个抽象组件:它本身不渲染DOM元素,也不出现在父组件链中。1">2.1.0新的include和exclude属性允许组件有条件地缓存.两者都可以表示为逗号分隔的字符串、正则表达式或数组:>/component>匹配首先检查组件自身的name选项,如果name选项不可用,则匹配其本地注册名称(parent的components选项的键值成分)。无法匹配匿名组件。vue生命周期钩子函数有哪些?生命周期钩子函数(11)生命周期钩子函数类型详解(11)beforeCreateFunction在实例初始化之后,数据观察者和事件/观察者事件配置之前被调用。创建实例后立即调用createdFunction。在这一步中,实例完成了以下配置:数据观察者、属性和方法的操作、watch/event事件回调。但是,挂载阶段尚未开始,$el属性当前不可见。beforeMountFunction在挂载开始之前被调用:关联的渲染函数被第一次调用。mountedFunctionel被新创建的vm.$el代替,挂载到实例后调用这个hook。如果根实例挂载文档内元素,则vm.$el在调用mounted时也在文档内。beforeUpdateFunction在更新数据时调用,在修补虚拟DOM之前。这适用于在更新之前访问现有的DOM,例如手动移除添加的事件监听器。服务器端渲染时不会调用这个钩子,因为只有初始渲染会在服务器端完成。updatedFunction这个钩子在虚拟DOM由于数据变化而被重新渲染和修补后被调用。activatedFunctionkeep-alive在组件激活时调用。服务器端渲染期间不会调用此挂钩。deactivatedFunctionkeep-alive在组件停用时调用。服务器端渲染期间不会调用此挂钩。beforeDestroyFunction在实例被销毁之前被调用。在这一步,实例仍然完全可用。服务器端渲染期间不会调用此挂钩。在销毁destroyedFunctionVue实例后调用。调用后,Vue实例指向的所有东西都将被解除绑定,所有事件监听器将被移除,所有子实例将被销毁。服务器端渲染期间不会调用此挂钩。errorCaptured(2.5.0+new)捕获后代组件的错误时调用该函数。该挂钩接收三个参数:错误对象、发生错误的组件实例以及包含错误来源信息的字符串。该钩子可以返回false以防止错误进一步向上传播。从后代组件捕获错误时调用。该挂钩接收三个参数:错误对象、发生错误的组件实例以及包含错误来源信息的字符串。该钩子可以返回false以防止错误进一步向上传播。注意:1.mounted和updated并不保证所有的子组件都会一起挂载。如果你想等到整个视图被渲染,你可以用vm.$nextTick替换mounted和updated:updated:function(){this.$nextTick(function(){//只有在//整个view已经重新渲染了})}2.http请求建议在创建的生命周期内发出