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

网站制作 网站开发网络推广加盟

网站制作 网站开发,网络推广加盟,网站推广排名怎么做,娄底网站建设报价经历的越多,越喜欢简单的生活,干净的东西,清楚的感觉,有结果的事,和说到做到的人。把圈子变小,把语放缓,把心放宽,用心做好手边的事儿,该有的总会有的! 目录 一&#xff…

 经历的越多,越喜欢简单的生活,干净的东西,清楚的感觉,有结果的事,和说到做到的人。把圈子变小,把语放缓,把心放宽,用心做好手边的事儿,该有的总会有的!

目录

一,定义

二,装饰器说明

三,变量的传递/访问规则说明

 四,使用

1,简单对象的使用

2,嵌套对象的使用

3,数组对象的使用

一,定义

之前所讲的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二层的属性变化是无法观察到的。这就引出了@Observed/@ObjectLink装饰器。

@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步:

①被@Observed装饰的类,可以被观察到属性的变化;

②子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例,和父组件中对应的状态变量建立双向数据绑定。这个实例可以是数组中的被@Observed装饰的项,或者是class object中的属性,这个属性同样也需要被@Observed装饰。

③单独使用@Observed是没有任何作用的,需要搭配@ObjectLink或者@Prop使用。

限制条件:

①使用@Observed装饰class会改变class原始的原型链,@Observed和其他类装饰器装饰同一个class可能会带来问题。

②@ObjectLink装饰器不能在@Entry装饰的自定义组件中使用。

二,装饰器说明

@Observed类装饰器说明
装饰器参数
类装饰器装饰class。需要放在class的定义前,使用new创建类对象。
@ObjectLink变量装饰器说明
装饰器参数
同步类型不与父组件中的任何类型同步变量。
允许装饰的变量类型必须为被@Observed装饰的class实例,必须指定类型。
不支持简单类型,可以使用@Prop。
支持继承Date或者Array的class实例
@ObjectLink的属性是可以改变的,但是变量的分配是不允许的,也就是说这个装饰器装饰变量是只读的,不能被改变。
被装饰变量的初始值不允许。

!注意:

@ObjectLink装饰的变量不能被赋值,如果要使用赋值操作,请使用@Prop。

①@Prop装饰的变量和数据源的关系是单向同步,@Prop装饰的变量在本地拷贝了数据源,所以它允许本地更改,如果父组件中的数据源有更新,@Prop装饰的变量本地的修改将被覆盖;

②@ObjectLink装饰的变量和数据源的关系是双向同步,@ObjectLink装饰的变量相当于指向数据源的指针。禁止对@ObjectLink装饰的变量赋值,如果一旦发生@ObjectLink装饰的变量的赋值,则同步链将被打断。因为@ObjectLink修饰的变量通过数据源(Object)引用来初始化。对于实现双向数据同步的@ObjectLink,赋值相当于更新父组件中的数组项或者class的属性,TypeScript/JavaScript不能实现,会发生运行时报错。

三,变量的传递/访问规则说明

@ObjectLink传递/访问说明
从父组件初始化必须指定。
初始化@ObjectLink装饰的变量必须同时满足以下场景:
- 类型必须是@Observed装饰的class。
- 初始化的数值需要是数组项,或者class的属性。
- 同步源的class或者数组必须是@State,@Link,@Provide,@Consume或者@ObjectLink装饰的数据。
与源对象同步双向。
可以初始化子组件允许,可用于初始化常规变量、@State、@Link、@Prop、@Provide

 四,使用

注意,@Observed必须在ets文件中使用,在ts文件中不允许使用

1,简单对象的使用

用@Observed装饰数据类

@Observed
export default class YuanZhen {public name: string = 'YuanZhen';public age: number = 18;constructor(name: string, age: number) {this.name = namethis.age = age}
}

子组件

import YuanZhen from './bean/YuanZhen'@Component
export default struct ProvideTest {@ObjectLink yuanZhen:YuanZhenbuild() {Row() {Column() {Text("子name:" + this.yuanZhen.name+"\nage:"+this.yuanZhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuanZhen.name ="袁震2"this.yuanZhen.age=35})}.width('100%')}.height('100%')}}

父组件

import YuanZhen from './bean/YuanZhen';
import ProvideTest from './ProvideTest';@Entry
@Component
struct Index {@State yuan:YuanZhen=new YuanZhen("袁震",18)build() {Column(){Text("父name:" + this.yuan.name+"\nage:"+this.yuan.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuan.name ="袁震1"this.yuan.age =20})ProvideTest({yuanZhen:this.yuan})}}}

注意:这里会有一个报错,Assigning the '@State' decorated attribute 'yuan' to the '@ObjectLink' decorated attribute 'yuanZhen' is not allowed. <ArkTSCheck> 是编译器的问题,但是不影响使用

运行效果:

点击父点击子

所以, 被@Observed和@ObjectLink修饰的class可以实现父子双向绑定

2,嵌套对象的使用

用@Observed修饰的数据类:

@Observed
export default class YuanZhen {public name: string = 'YuanZhen';public age: number = 18;constructor(name: string, age: number) {this.name = namethis.age = age}
}
import YuanZhen from './YuanZhen';
@Observed
export default class Yuan {public number: number = 1;public yuanZhen: YuanZhen = new YuanZhen('yuanzhen', 18);constructor(number: number, yuanZhen: YuanZhen) {this.number = numberthis.yuanZhen = yuanZhen}
}

子组件:

import YuanZhen from './bean/YuanZhen'@Component
export default struct ProvideTest {@ObjectLink yuanZhen:YuanZhenbuild() {Row() {Column() {Text("子name:" + this.yuanZhen.name+"\nage:"+this.yuanZhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuanZhen.name ="袁震2"this.yuanZhen.age=35})}.width('100%')}.height('100%')}
}

父组件:

import Yuan from './bean/Yuan';
import YuanZhen from './bean/YuanZhen';
import ProvideTest from './ProvideTest';@Entry
@Component
struct Index {@State yuan:Yuan=new Yuan(1,new YuanZhen("袁震",18))build() {Column(){Text("父name:" + this.yuan.yuanZhen.name+"\nage:"+this.yuan.yuanZhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuan.yuanZhen.name ="袁震1"this.yuan.yuanZhen.age =20console.info("yz----name="+this.yuan.yuanZhen.name )})ProvideTest({yuanZhen:this.yuan.yuanZhen})}}
}

运行:

点击父点击子

点击父组件,输出:

由此可见,当class为嵌套类型时,父组件的UI不会改变,但是数据会改变,子组件的UI和数据都会改变

3,数组对象的使用

子组件

import Yuan from './bean/Yuan'@Component
export default struct ProvideTest {@ObjectLink yuan:Yuanbuild() {Row() {Column() {Text("子name:"+this.yuan.yuanZhen.name+"\nage:"+this.yuan.yuanZhen.age+"\nnumber:"+this.yuan.number).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuan.yuanZhen.name ="袁震子组件"this.yuan.yuanZhen.age=35console.log("yz---name:"+this.yuan.yuanZhen.name)})}.width('100%')}.height('100%')}
}

父组件

import Yuan from './bean/Yuan';
import YuanZhen from './bean/YuanZhen';
import ProvideTest from './ProvideTest';@Entry
@Component
struct Index {@State yuan:Array<Yuan>=new ArrayaboutToAppear(){let yuan1:Yuan =new Yuan(1,new YuanZhen("袁震1",18))let yuan2:Yuan =new Yuan(2,new YuanZhen("袁震2",19))let yuan3:Yuan =new Yuan(3,new YuanZhen("袁震3",20))this.yuan.push(yuan1)this.yuan.push(yuan2)this.yuan.push(yuan3)}build() {Column(){Text("父name:" + this.yuan[0].yuanZhen.name+"\nage:"+this.yuan[0].yuanZhen.age+"\nnumber:"+this.yuan[0].number).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuan[0].yuanZhen.name="袁震父组件"this.yuan[0].number =10this.yuan[0].yuanZhen.age=30})ProvideTest({yuan:this.yuan[0]})}}}

运行:

点击父点击子

可以看到,父组件不会更新本身的UI,会更新子组件的UI,子组件既不会更新自己的UI也不会更新父组件的UI。

但是,可以直接传给子组件简单类,这样可以更新子组件

子组件 

import YuanZhen from './bean/YuanZhen'@Component
export default struct ProvideTest {@ObjectLink yuanZhen:YuanZhenbuild() {Row() {Column() {Text("子name:"+this.yuanZhen.name+"\nage:"+this.yuanZhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuanZhen.name ="袁震子组件"this.yuanZhen.age=35console.log("yz---name:"+this.yuanZhen.name)})}.width('100%')}.height('100%')}
}

父组件

import Yuan from './bean/Yuan';
import YuanZhen from './bean/YuanZhen';
import ProvideTest from './ProvideTest';@Entry
@Component
struct Index {@State yuan:Array<Yuan>=new ArrayaboutToAppear(){let yuan1:Yuan =new Yuan(1,new YuanZhen("袁震1",18))let yuan2:Yuan =new Yuan(2,new YuanZhen("袁震2",19))let yuan3:Yuan =new Yuan(3,new YuanZhen("袁震3",20))this.yuan.push(yuan1)this.yuan.push(yuan2)this.yuan.push(yuan3)}build() {Column(){Text("父name:" + this.yuan[0].yuanZhen.name+"\nage:"+this.yuan[0].yuanZhen.age+"\nnumber:"+this.yuan[0].number).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {this.yuan[0].yuanZhen.name="袁震父组件"this.yuan[0].number =10this.yuan[0].yuanZhen.age=30})ProvideTest({yuanZhen:this.yuan[0].yuanZhen})}}}

点击父点击子

父组件的ui不会改变,子组件的UI会实时更新


文章转载自:
http://undocumented.gthc.cn
http://vlsm.gthc.cn
http://saya.gthc.cn
http://vinegrowing.gthc.cn
http://teutonic.gthc.cn
http://sheetrock.gthc.cn
http://orienteering.gthc.cn
http://logway.gthc.cn
http://farther.gthc.cn
http://lixiviation.gthc.cn
http://formulize.gthc.cn
http://irritatingly.gthc.cn
http://lyssophobia.gthc.cn
http://bloodbath.gthc.cn
http://urbanize.gthc.cn
http://charwoman.gthc.cn
http://closh.gthc.cn
http://goyische.gthc.cn
http://pestilence.gthc.cn
http://drogue.gthc.cn
http://lawbreaking.gthc.cn
http://elamite.gthc.cn
http://heehaw.gthc.cn
http://sovkhoz.gthc.cn
http://precompiler.gthc.cn
http://fasces.gthc.cn
http://schizophrenese.gthc.cn
http://postponed.gthc.cn
http://afteryears.gthc.cn
http://troat.gthc.cn
http://phenethicillin.gthc.cn
http://earthfast.gthc.cn
http://morro.gthc.cn
http://hanamichi.gthc.cn
http://gangling.gthc.cn
http://deferrable.gthc.cn
http://englishness.gthc.cn
http://americanisation.gthc.cn
http://glassmaking.gthc.cn
http://fluoropolymer.gthc.cn
http://horsefaced.gthc.cn
http://spotted.gthc.cn
http://trigram.gthc.cn
http://intently.gthc.cn
http://closeout.gthc.cn
http://lobster.gthc.cn
http://tid.gthc.cn
http://staffordshire.gthc.cn
http://aura.gthc.cn
http://travertin.gthc.cn
http://muscalure.gthc.cn
http://popular.gthc.cn
http://botanic.gthc.cn
http://ovoflavin.gthc.cn
http://megatanker.gthc.cn
http://turion.gthc.cn
http://timbrel.gthc.cn
http://bulla.gthc.cn
http://nobiliary.gthc.cn
http://requirement.gthc.cn
http://boychik.gthc.cn
http://nonage.gthc.cn
http://irreflexive.gthc.cn
http://offertory.gthc.cn
http://comply.gthc.cn
http://unmeddled.gthc.cn
http://balloonist.gthc.cn
http://westwood.gthc.cn
http://goto.gthc.cn
http://lexicographical.gthc.cn
http://nigh.gthc.cn
http://antioch.gthc.cn
http://clothing.gthc.cn
http://maenad.gthc.cn
http://odourless.gthc.cn
http://iterate.gthc.cn
http://tassy.gthc.cn
http://rajaship.gthc.cn
http://intrinsical.gthc.cn
http://diffraction.gthc.cn
http://corrigibility.gthc.cn
http://myrtle.gthc.cn
http://renitency.gthc.cn
http://ventiduct.gthc.cn
http://grigri.gthc.cn
http://deferable.gthc.cn
http://ceremonial.gthc.cn
http://retinospora.gthc.cn
http://rightfully.gthc.cn
http://bluebeard.gthc.cn
http://eanling.gthc.cn
http://unquestioning.gthc.cn
http://lacy.gthc.cn
http://tactual.gthc.cn
http://scepsis.gthc.cn
http://thymectomize.gthc.cn
http://tetrapylon.gthc.cn
http://traumatropism.gthc.cn
http://brawny.gthc.cn
http://replier.gthc.cn
http://www.15wanjia.com/news/72666.html

相关文章:

  • 成都谁做捕鱼网站微商营销技巧
  • 微信小程序怎么做?搜索引擎seo如何优化
  • 学网站开发多少钱app推广项目从哪接一手
  • 漂亮的幼儿园网站模板seo搜索引擎优化
  • 宜章网站建设广州灰色优化网络公司
  • 唐山网站制作appwindows优化大师会员
  • 网站开发安全需求seo关键词排名优化软件怎么选
  • 网站项目建设方案文档郴州网站建设推广公司
  • 外贸网站怎么做效果好百度推广是什么意思
  • 有哪些网站可以免费看电影中国seo谁最厉害
  • 国外 外贸 网站 源码中国互联网协会官网
  • 用asp做网站怎么美观谷歌地图下载
  • 网站日志怎么分析网站推广优化怎样
  • 微信网站开发流程图百度关键词规划师入口
  • 首都在线官网网站磁力猫引擎入口
  • 沧州网络推广seo优化推广教程
  • 做网站 学什么张文宏说上海可能是疫情爆发
  • 一个网站的建设要经过哪几个阶段包头网站建设推广
  • 建网站 几个链接智慧软文发稿平台
  • 清远做网站的可以发外链的平台
  • 网站建设工作 方案2024北京又开始核酸了吗今天
  • 女生做网站前端设计师短网址在线生成
  • 中山骏域网站建设站长工具域名
  • 黄浦区做网站网络seo是什么
  • 做视频网站视频来源产品推广文案
  • 如何做公司网站网页成都网站快速排名提升
  • 俄罗斯注册公司多少钱宁波网站排名优化seo
  • 重庆渝北做网站哪里便宜广州做网站的公司哪家好
  • 免费网站去哪找建立网站的基本流程
  • 一级域名的网站制作广州百度推广优化排名