【每日學點HarmonyOS Next知識】Web Header更新、狀態變量嵌套問題、自定義彈窗、stack圓角、Flex換行問題
1、HarmonyOS 有關webview Header無法更新的問題?
業務A頁面 打開 webivew B頁面,第一次打開帶了header請求,然后退出webview B頁面,然后動態更新了header參數 但是抓包發現。第二次webview的請求是沒有header的 其他: headers 里的參數一直有在動態更新,debug發現每次觸發 prefetchPage 或 loadUrl 都是更新了header,但是實際請求沒有更新,而且header為空了。
prefetchPage會對同一url進行緩存,緩存時間為5min,且無法判斷當前url是否緩存,使用prefetchPage對已緩存的url再次請求時不會觸發真正的請求,也不會帶上header。
使用loadUrl,需要注意的是,在同時使用onControllerAttached時,為了防止Web組件時序問題,在web src處需要寫入空字符串。參考API文檔:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#ZH-CN_TOPIC_0000001847210168__setcustomuseragent10
示例代碼:
Web({ src: "", controller: this.webViewController }).onLoadIntercept(event => {if (event && event.data && event.data.getRequestUrl()) {let url = event.data.getRequestUrl()}return false}).onControllerAttached(() => {console.info("yyyyy onControllerAttached")let headers = new Array<webview.WebHeader>()headers.push({ headerKey: 'AUTHORIZATION', headerValue: 'test value' })// this.webViewController.prefetchPage(this.loadUrl, headers)this.webViewController.loadUrl(this.loadUrl, headers)})
2、HarmonyOS 嵌套一層的數組無法監聽相同數據增加,但是無嵌套的數組可以監聽相同數據增加?
嵌套一層的數組無法監聽相同數據增加,但是無嵌套的數組可以監聽相同數據增加
ArkUI的變化是與@State的變量有關系的,嵌套數組里數據是已經發生變化了,但是UI監聽不到深層的,這邊建議修改對應代碼如:
@State data5:Array<RequestData4> = []
Text("原生數據:\n" + JSON.stringify(this.data5) ?? "2333").padding(10).fontColor(Color.Black)
this.data5 = JSON.parse(JSON.stringify( this.data.data5))
3、HarmonyOS 自定義彈窗如何在工具類中使用?
在class中定義了CustomDialogController 在組件中調用的時候 沒有反應不會彈出彈窗來 ,想問一下CustomDialog如何寫在工具類中,讓組件調用并且可以傳入內容
自定義彈窗的CustomDialogController只能在@component中使用,外部返回時會失效。 彈框場景更推薦使用promptAction.openCustomDialog,后續彈框也主要是基于promptAction做演進。開發者主要需要自定義彈框內容的buillder,使用參考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5
4、HarmonyOS stack設置圓角不生效?
參考代碼:
@Entry
@Component
struct StackExample {build() {Stack({ alignContent: Alignment.Center }) {Text('First child, show in bottom').width('90%').height('80%').backgroundColor(0xd2cab3).align(Alignment.Top)Text('Second child, show in top').width('70%').height('60%').backgroundColor(0xc1cbac).align(Alignment.Top)}.width('100%').height(150).margin({ top: 300 }).borderRadius(33).backgroundColor(Color.Red)}
}
5、HarmonyOS Flex組件設置不換行怎么能避免被截斷?
UI中通過Flex展示小標簽,產品要求只在一行展示,展示不下就不展示了。目前通過Flex組件實現標簽列表的展示,設置成NoWrap屬性后,標簽會一直平鋪下去,且最后展示的標簽還會被截斷。如果不想被截斷設置成Wrap屬性后,又無法限制單行顯示。請問如何操作?
給父組件設置高度,加上clip裁剪屬性,文檔:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-sharp-clipping-V5
參考以下demo:
@Entry
@Component
struct Test66 {@State arr: string[] = ['西安市', '成都市22','成都市33','成都市44','成都市55','成都市66', '重慶市', '烏魯木齊市', '北京市', '呼倫貝爾市', '北京市333'];build() {Column() {Flex({ wrap: FlexWrap.Wrap }) {ForEach(this.arr, (item: string) => {Text(item).fontSize('16vp').borderWidth('1vp').borderColor('#666666').borderRadius('10vp').padding('3vp').height(100)})}}.width('100%').height(100).backgroundColor(0xDCDCDC).clip(true)}
}