HarmonyOS 鸿蒙Next 父组件传给webview子组件数值,获取不到
HarmonyOS 鸿蒙Next 父组件传给webview子组件数值,获取不到
问题:由其他界面跳转到本界面,获取route传过来值,在赋值给子组件,但是子组件获取不到。场景 使用webView预览隐私或服务说明,做区分url的
页面:
@Entry
@Component
struct PrivacyPage {
private info: string=’’;
@State url: string =‘https://developer.huawei.com/consumer/cn/forum/communityHome’
onPageShow() {
const params = router.getParams() as Record<string, string>; // 获取传递过来的参数对象
if (params.privacyType) {
this.info = params.privacyType;
<span class="hljs-keyword"><span class="hljs-keyword">if</span></span> (<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.info === <span class="hljs-string"><span class="hljs-string">'service_agreement'</span></span>) { <span class="hljs-comment"><span class="hljs-comment">// 使用严格等于比较</span></span>
<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.url = <span class="hljs-string"><span class="hljs-string">'https://baidu.com'</span></span>;
} <span class="hljs-keyword"><span class="hljs-keyword">else</span></span> {
<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.url = <span class="hljs-string"><span class="hljs-string">'https://developer.huawei.com/consumer/cn/forum/communityHome'</span></span>;
}
}
}
build() {
Column() {
//子组件
ShowWebView({url:this.url})
}
.width(‘100%’)
.height(‘100%’)
}
}
子组件:@Prop 接受父组件接受不到改变的值
@Component
export struct ShowWebView {
@State remoteProgressValue: number = 0;
@State isHiddenRemoteProgress: Boolean = true;
@Prop url: string;
controller: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
Stack() {
if (this.isHiddenRemoteProgress) {
Progress({ value: START_VALUE, total: TOTAL_VALUE, type: ProgressType.Linear })
.width(CommonUISize.FULL_WIDTH)
.height(3)
.value(this.remoteProgressValue)
.color(Color.Green)
}
}
Web({
src: <span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.url,
controller: <span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.controller
})
.onProgressChange((event) => {
<span class="hljs-keyword"><span class="hljs-keyword">if</span></span> (event) {
<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.remoteProgressValue = event.newProgress;
<span class="hljs-keyword"><span class="hljs-keyword">if</span></span> (<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.remoteProgressValue >= TOTAL_VALUE) {
<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.isHiddenRemoteProgress = <span class="hljs-literal"><span class="hljs-literal">false</span></span>;
}
}
})
.domStorageAccess(<span class="hljs-literal"><span class="hljs-literal">true</span></span>)</code><button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button></pre></div></div>
把onPageShow改成aboutToAppear
获取参数的另一种写法
this.info = Object(router.getParams())['privacyType']
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
鸿蒙Next教程学习来:https://www.itying.com/category-93-b0.html
感谢
为什么我Web组件始终渲染不出来页面
HarmonyOS的流畅动画和过渡效果让操作更加顺畅,体验极佳。
先尝试直接写死,看能不能出来页面 Web({ src: ‘https://xxx’, controller: this.controller }) 如果不出来页面,说明你的h5页面用到了一些权限,需要加进去,比如页面用到了本地存储功能,那你的web组件需要添加属性.domStorageAccess(true) 当确定src:直接写url能加载出来之后,通过跳转携带参数加载不出来,那这种问题是加载时机出了问题。 src只能是首次页面有值的时候才能显示,如果Web组件已经准备完毕了,但src还没值,过了1秒src才有值,这种情况下src所绑定的变量即使改变了,也不会执行,你需要在拿到数据时,利用web绑定的controller,也就是调用this.controller.loadUrl(‘http://’)来执行。
在HarmonyOS鸿蒙Next系统中,父组件向webview子组件传递数值而未能成功获取的问题,通常可能涉及几个关键方面。首先,确保你使用了正确的属性绑定机制来传递数据。在鸿蒙的组件化开发模式中,数据传递通常通过属性和事件机制实现。
-
检查属性绑定:确认父组件中传递给webview子组件的属性名与webview子组件中接收的属性名完全一致。同时,确保属性类型匹配,如整数、字符串等。
-
数据传递方式:如果使用的是自定义属性传递,需要确保在子组件的Java代码中正确解析了这些属性。例如,通过
AttributeSet
解析自定义属性。 -
Webview处理:在webview子组件内部,确保接收到的数据被正确处理。如果是JavaScript环境,可能需要通过特定的接口或方法从Java层获取这些数据。
-
日志调试:利用鸿蒙的日志系统打印传递和接收过程中的关键变量值,这有助于定位问题所在。
-
版本兼容性:确认所有使用的鸿蒙SDK和库文件均为最新版本,以避免因版本不兼容导致的问题。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html