HarmonyOS 鸿蒙Next 父组件传给webview子组件数值,获取不到

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

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) =&gt; {
      <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 &gt;= 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>
6 回复

把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子组件传递数值而未能成功获取的问题,通常可能涉及几个关键方面。首先,确保你使用了正确的属性绑定机制来传递数据。在鸿蒙的组件化开发模式中,数据传递通常通过属性和事件机制实现。

  1. 检查属性绑定:确认父组件中传递给webview子组件的属性名与webview子组件中接收的属性名完全一致。同时,确保属性类型匹配,如整数、字符串等。

  2. 数据传递方式:如果使用的是自定义属性传递,需要确保在子组件的Java代码中正确解析了这些属性。例如,通过AttributeSet解析自定义属性。

  3. Webview处理:在webview子组件内部,确保接收到的数据被正确处理。如果是JavaScript环境,可能需要通过特定的接口或方法从Java层获取这些数据。

  4. 日志调试:利用鸿蒙的日志系统打印传递和接收过程中的关键变量值,这有助于定位问题所在。

  5. 版本兼容性:确认所有使用的鸿蒙SDK和库文件均为最新版本,以避免因版本不兼容导致的问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部