当前位置: 首页 > news >正文

东方市网站建设_网站建设公司_安全防护_seo优化

电子商务网站的建设费用,网上竞价,怎么推广自己的公司网站,中国十大网络安全龙头文章目录 一、实例和组件定义data的区别二、组件data定义函数与对象的区别三、原理分析四、结论 一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象#xff0c;也可以是一个函数 const app new Vue({el:#app,// 对象格式data:{foo:也可以是一个函数 const app new Vue({el:#app,// 对象格式data:{foo:foo},// 函数格式data(){return {foo:foo}} })组件中定义data属性只能是一个函数 如果为组件data直接定义为一个对象 Vue.component(component1,{template:div组件/div,data:{foo:foo} })则会得到警告信息 警告说明返回的data应该是一个函数在每一个组件实例中 二、组件data定义函数与对象的区别 上面讲到组件data必须是一个函数不知道大家有没有思考过这是为什么呢 在我们定义好一个组件的时候vue最终都会通过Vue.extend()构成组件实例 这里我们模仿组件构造函数定义data属性采用对象的形式 function Component(){} Component.prototype.data {count : 0 }创建两个组件实例 const componentA new Component() const componentB new Component()修改componentA组件data属性的值componentB中的值也发生了改变 console.log(componentB.data.count) // 0 componentA.data.count 1 console.log(componentB.data.count) // 1产生这样的原因这是两者共用了同一个内存地址componentA修改的内容同样对componentB产生了影响 如果我们采用函数的形式则不会出现这种情况函数返回的对象内存地址并不相同 function Component(){this.data this.data() } Component.prototype.data function (){return {count : 0} }修改componentA组件data属性的值componentB中的值不受影响 console.log(componentB.data.count) // 0 componentA.data.count 1 console.log(componentB.data.count) // 0vue组件可能会有很多个实例采用函数返回一个全新data形式使每个实例对象的数据不会受到其他实例对象数据的污染 三、原理分析 首先可以看看vue初始化data的代码data的定义可以是函数也可以是对象 源码位置/vue-dev/src/core/instance/state.js function initData (vm: Component) {let data vm.$options.datadata vm._data typeof data function? getData(data, vm): data || {}... }data既能是object也能是function那为什么还会出现上文警告呢 别急继续看下文 组件在创建的时候会进行选项的合并 源码位置/vue-dev/src/core/util/options.js 自定义组件会进入mergeOptions进行选项合并 Vue.prototype._init function (options?: Object) {...// merge optionsif (options options._isComponent) {// optimize internal component instantiation// since dynamic options merging is pretty slow, and none of the// internal component options needs special treatment.initInternalComponent(vm, options)} else {vm.$options mergeOptions(resolveConstructorOptions(vm.constructor),options || {},vm)}...}定义data会进行数据校验 源码位置/vue-dev/src/core/instance/init.js 这时候vm实例为undefined进入if判断若data类型不是function则出现警告提示 strats.data function (parentVal: any,childVal: any,vm?: Component ): ?Function {if (!vm) {if (childVal typeof childVal ! function) {process.env.NODE_ENV ! production warn(The data option should be a function that returns a per-instance value in component definitions.,vm);return parentVal;}return mergeDataOrFn(parentVal, childVal);}return mergeDataOrFn(parentVal, childVal, vm); };四、结论 根实例对象data可以是对象也可以是函数根实例是单例不会产生数据污染情况组件实例对象data必须为函数目的是为了防止多个组件实例对象之间共用一个data产生数据污染。采用函数的形式initData时会将其作为工厂函数都会返回全新data对象 希望本文能够对您有所帮助如果您有任何问题或建议请随时在评论区留言联系 章挨踢章IT 谢谢阅读
http://www.ihoyoo.com/news/20452.html

相关文章:

  • 侯马网站建设宁波建网站找哪家
  • 广州网站制作系统百度浏览器在线打开
  • 福州哪里会网站制作的绍兴做网站多少钱
  • 济源哪里做网站全国最大招商网
  • 企业网站建设网站优化网站弹广告是什么样做的
  • 廊坊网站建设墨子如何自己开发一款app
  • 相城区公司网站建设wordpress可以承受多大数据
  • 两个公司的网站建设中国建筑平台网
  • 网站文案设计广东企业网站制作
  • 如何进行课程中心网站建设wordpress 媒体库 地址
  • 如何写代码做网站南京快速建站模板下载
  • 成都网站建设scyiyou简单网页代码html
  • 网站设置不发送消息怎么设置回来怎么下载建设银行网站
  • 微网站如何建立通辽做网站0475seo
  • 网站建设 意见征集如果我的网站被百度收录了_以后如何做更新争取更多收录
  • 南宁手机端建站模板无锡模板建站源码
  • 办公网新闻上传网站开发企业年金查询官网
  • 如何申请免费网站域名网站建设公司专业
  • 网站哪个公司做百度关键词推广帝搜软件
  • 德令哈网站建设公司网站设计与开发期末考试题
  • 网络交友的网站建设电子商城网站开发 pdf
  • 网站直播用php怎么做的网页设计师联盟网站怎么
  • 建设网站系统wordpress升级快速
  • 360建网站好不好?直播平台推广
  • 做电梯销售从哪些网站获取信息手机网站 后台
  • 网站建设实训指导书做百度词条需要哪些网站
  • 基于php网站开发设计附近的网站电脑培训班
  • 仿大学网站网页代码文化馆网站建设
  • 下载网站源文件房产网app
  • 苏州做淘宝网站企业网站建设公司怎么收费