如何區分router.push跳轉快應用的來源渠道

華為開發者論壇發表於2021-04-22

現象描述:

從一個快應用A 跳轉到B 快應用的B1 頁面, A 可能是一個快應用,也可能是負一屏的卡片,如何區分來自哪個呢?

解決方法:

快應用和卡片都是透過router.push 介面來跳轉其他快應用的,使用Deeplink 中的hap 連結來實現的,同時hap 連結裡是可以攜帶引數,在跳過去時加個flag 引數,在B 快應用的B1 頁面獲取引數,根據引數值判斷來源是負一屏的卡片還是快應用A ,然後根據需要做相應的邏輯處理。快應用使用this.xx 獲取跳轉攜帶的引數。

示例程式碼:

A快應用程式碼:

<template>
    <div>
        <text class="button" onclick="router">測試</text>
    </div>
</template>
<style>
    .button{
        width: 100%;
        height: 200px;
        color: #000000;
        font-size: 80px;
    }
</style>
<script>
    import router from '@system.router';
    module.exports = {
        data: {
            
        },
        onInit() {
            this.$page.setTitleBar({ text: '' })
        },
        router(){
            console.log("router");
            router.push({
                uri: 'hap://app/com.huawei.ceshi/Test?body=quickapp',//快應用引數
            })
        }
    }
</script>

卡片相關程式碼:

<template>
    <div>
        <text class="button" onclick="router">測試</text>
    </div>
</template>
<style>
    .button{
        width: 100%;
        height: 200px;
        color: #000000;
        font-size: 80px;
    }
</style>
<script>
    import router from '@system.router';
    module.exports = {
        data: {
            
        },
        onInit() {
            this.$page.setTitleBar({ text: '' })
        },
        router(){
            console.log("router");
            router.push({
                uri: 'hap://app/com.huawei.ceshi/Test?body=card',//卡片引數
            })
        }
    }
</script>

B 快應用程式碼:

onInit() 生命週期方法中獲取引數值,如下程式碼中定義了accept 變數接收引數值,比如在onBackPress() 方法中根據來源實現不同的業務邏輯。

<template>
    <div style="flex-direction: column;">
        <text class="text">下面是接收的資料</text>
        <text class="text" style="background-color: black">{{accept}}</text>
    </div>
</template>
<style>
    .text {
        height: 80px;
        font-size: 50px;
        color: red;
        width: 500px;
    }
</style>
<script>
    import router from '@system.router';
    module.exports = {
        data: {
            accept: ""
        },
        onInit() {
            this.$page.setTitleBar({ text: '' })
            this.accept = this.body;
        },
        onBackPress() {
            if (this.accept === "quickapp") {
                console.log("this is quickapp");
            } else if (this.accept === "quickapp") {
                console.log("this is crad");
            }else{
                router.back()
            }
            return true;
        }
    }
</script>

欲瞭解更多詳情,請參閱:

快應用開發指導文件: https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-whitepaper

快應用路由介面介紹: https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-api-router


原文連結: https://developer.huawei.com/consumer/cn/forum/topic/0204422879753860623?fid=18

原作者:Mayism

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2769298/,如需轉載,請註明出處,否則將追究法律責任。

相關文章