jquery.getParams.js

本文介绍了一个用于获取URL中指定参数值的jQuery插件。该插件提供了两个方法:getURLParam用于从当前页面URL中获取参数值;getStringParam则可以从任意给定的字符串中提取参数值。

本文参照:http://www.cnblogs.com/cocos/archive/2010/05/14/1735046.html

jQuery.extend({
/**
    * Returns get parameters.
    *
    * If the desired param does not exist, null will be returned
    *
    * @example value = $.getURLParam("paramName");
    */
    getURLParam: function(strParamName)
    {
        var strReturn = "";
        var strHref = window.location.href.toUpperCase();

        var bFound = false;

        var cmpstring = strParamName.toUpperCase() + "=";
        var cmplen = cmpstring.length;

        if (strHref.indexOf("?") > -1)
        {
            var strQueryString = strHref.substr(strHref.indexOf("?") + 1);0
            var aQueryString = strQueryString.split("&");
            for (var iParam = 0; iParam < aQueryString.length; iParam++)
            {
                if (aQueryString[iParam].substr(0, cmplen) == cmpstring)
                {
                    var aParam = aQueryString[iParam].split("=");
                    strReturn = aParam[1];
                    bFound = true;
                    break;
                }

            }
        }
        if (bFound == false) return null;
        //  www.permadi.com/tutorial/urlEncoding/
        //<space> %20  or + 
       // return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g, '%22').replace(/\'/g, '%27').replace(/\//g, '%2F');
        strReturn = strReturn.replace(/\+/g, '%20');
        return unescape(strReturn);
    },
    getStringParam: function(strParamName, strParamString)
    {
        var strReturn = "";
        var strHref = strParamString.toUpperCase();
        var bFound = false;

        var cmpstring = strParamName.toUpperCase() + "=";
        var cmplen = cmpstring.length;

        var strQueryString = strHref;
        var aQueryString = strQueryString.split("&");
        for (var iParam = 0; iParam < aQueryString.length; iParam++)
        {
            if (aQueryString[iParam].substr(0, cmplen) == cmpstring)
            {
                var aParam = aQueryString[iParam].split("=");
                strReturn = aParam[1];
                bFound = true;
                break;
            }

        }

        if (bFound == false) return null;
        return strReturn;
    }
});

 

$(_tt).datagrid({ collapsible : true, rownumbers : true, remoteSort : false, nowrap : true, fitColumns : false, singleSelect : false, fit : true, striped : true, pagination : true, pageSize : pageSize, pageList : pageList, queryParams : getParams(), iconCls : 'icon-edit', idField : 'ID', url : _url_list, frozenColumns : [ [ { field : 'ck', checkbox : true }, { title : $.pde.message['common.button.operate'], field : 'viewFile', width : 70, sortable : false, align : 'center', formatter : function(value, rec, index) { var a = '<a href="javascript:void(0)" style="border:none;" onclick="$.pde.jsLoader.datagridClick('filemanager', ' + rec.ID + ')">'; a += '<img src="' + _path + 'js/jquery/themes/icons/pdeIcon/file-management.png" class="pdeGridImg" title="' + $.pde.message['p9.common.archives.manager.menu.fileManager'] + '" style="height:15px;"/>'; a += '</a>'; var b = '<a href="javascript:void(0)" style="border:none;" onclick="$.pde.jsLoader.call('js/p9/amc/library/commonEntry.js', 'viewBox', ' + rec.ID + ')">'; b += '<img src="' + _path + 'js/jquery/themes/icons/pdeIcon/view.png" class="pdeGridImg" title="' + $.pde.message['p9.amc.AmsArchivesManager.jsp.itemDetail'] + '" style="height:15px;"/>'; b += '</a>'; return a + b; } }, { title : 'ID', field : 'ID', width : 30, sortable : false, hidden : true } ] ], columns : getColumnsByFields(_listFields), onLoadSuccess : function() { var amsResource = $.pde.power.resource; $.pde.power.getPower({ url : _path + amsResource.url + '/' + amsResource.amsInterfaceFileManager + '/' + _fonds_id, menu : '#functionMenu' }); }, onDblClickRow : function(rowIndex, rowData) { $.pde.jsLoader.call('js/p9/amc/library/commonEntry.js', 'viewBox', rowData.ID); } }); $.pde.jsLoader.call('js/p9/amc/library/commonGroup.js', 'customGroupView2', undefined);翻译一下这段代码的意思
06-02
<think>我们正在讨论的是在OpenHarmony的ArkUI开发中,使用`router.getParams()`方法获取路由传递的参数。 根据引用[2]和引用[3]中的示例,我们可以了解到`router.getParams()`的基本用法。 关键点: 1. `router.getParams()`返回的是一个对象,包含了通过路由传递过来的所有参数。 2. 通常在目标页面的`onPageShow`生命周期或者构建时(如`build`方法中)调用该方法来获取参数。 示例步骤: 步骤1:在源页面使用`router.pushUrl`或`router.replaceUrl`传递参数 ```typescript // 源页面(例如Index页面) import router from '@ohos.router'; // 跳转并传递参数 router.pushUrl({ url: 'pages/Home', // 目标页面路径 params: { username: '张三', // 传递的参数 age: 20 } }, router.RouterMode.Standard, (err) => { if (err) { console.error('跳转失败'); } }); ``` 步骤2:在目标页面(Home页面)使用`router.getParams()`获取参数 ```typescript // 目标页面(Home.ets) import router from '@ohos.router'; @Entry @Component struct Home { // 使用@State装饰器来存储参数,以便在UI中响应式更新 @State username: string = ''; // 初始化为空 @State age: number = 0; // 在页面显示时获取参数(也可以在build中直接获取,但注意build可能会多次执行) onPageShow() { // 获取传递过来的所有参数 const params = router.getParams(); if (params) { this.username = params['username'] as string; // 类型断言 this.age = params['age'] as number; } } // 或者直接在build中通过router.getParams()获取(注意:每次build都会执行,可能会重复获取) // 但注意:在build中获取参数可能会因为页面重建而多次执行,所以建议在onPageShow中获取一次 build() { // 也可以这样写,但不推荐,因为每次build都会执行 // const params = router.getParams(); // if (params) { // this.username = params['username'] as string; // this.age = params['age'] as number; // } Column() { Text(`用户名: ${this.username}`).fontSize(30) Text(`年龄: ${this.age}`).fontSize(30) } } } ``` 注意事项: 1. 参数传递是键值对形式,键名需与获取时一致。 2. 参数可以是字符串、数字等基本类型,也可以是对象(但注意传递对象时,在目标页面获取到的是普通对象,需要自行处理)。 3. 使用`router.replaceUrl`传递参数的方式类似,但会替换当前页面,无法通过返回操作回到源页面。 4. 在目标页面,如果通过返回操作(如`router.back()`)也可以传递参数(见引用[3]中`router.back`的用法),这时在源页面的`onPageShow`方法中可以通过`router.getParams()`获取返回的参数。 返回参数示例: 在目标页面(Home)返回时传递参数: ```typescript router.back({ url: 'pages/Index', params: { result: '修改后的数据' } }); ``` 在源页面(Index)的`onPageShow`方法中获取返回参数: ```typescript onPageShow() { const params = router.getParams(); if (params && params['result']) { console.log('返回参数:', params['result']); } } ``` 常见问题: 1. 如果传递的参数是对象,在目标页面获取时需要进行类型转换(使用`as`关键字)或类型判断。 2. 在页面跳转过程中,参数传递是深拷贝还是浅拷贝?根据文档,传递的参数是深拷贝,即传递的是值的副本,不会影响原页面的数据。 引用说明: 根据引用[2]和引用[3],我们知道了`router.getParams()`的使用场景和方法。 生成相关问题: 1. 在OpenHarmony中如何通过路由传递复杂对象(如自定义类实例)? 2. 使用`router.getParams()`获取参数时,如何避免重复获取导致的性能问题? 3. 页面返回时如何传递参数?在源页面如何接收? 4. 路由传递参数的大小是否有限制? 5. 在OpenHarmony中,路由传递的参数在页面销毁后是否还会保留? 请根据以上内容进行实践,如有问题可进一步探讨。</think>在 OpenHarmony 的 ArkUI 开发中,`router.getParams()` 是用于获取页面路由传递参数的核心方法。以下是详细使用指南: ### 一、基本使用方法 1. **导入路由模块**: ```typescript import router from '@ohos.router'; ``` 2. **在目标页面获取参数**: ```typescript @Entry @Component struct DetailPage { // 直接获取参数值 @State productId: string = router.getParams()?.['id'] || ''; // 获取完整参数对象 @State allParams: Object = router.getParams() || {}; build() { Column() { Text(`产品ID: ${this.productId}`).fontSize(20) Text(`完整参数: ${JSON.stringify(this.allParams)}`) } } } ``` ### 二、参数传递方式 1. **跳转时传递参数**(源页面): ```typescript // 使用 pushUrl router.pushUrl({ url: 'pages/DetailPage', params: { id: 'P1001', category: 'electronics' } // 传递的参数 }, router.RouterMode.Standard) // 使用 replaceUrl router.replaceUrl({ url: 'pages/LoginPage', params: { redirect: 'HomePage' } }, router.RouterMode.Single) ``` [^1][^3] 2. **返回时传递参数**: ```typescript // 在子页面返回时传递数据 router.back({ url: 'pages/MainPage', params: { updated: true } // 返回参数 }) ``` [^2][^3] ### 三、最佳实践 1. **参数类型处理**: ```typescript const params = router.getParams(); const numValue = Number(params['count']); // 字符串转数字 const boolValue = params['isValid'] === 'true'; // 字符串转布尔 ``` 2. **空值安全处理**: ```typescript // 使用可选链和空值合并 const username = router.getParams()?.['username'] ?? '默认用户'; ``` 3. **生命周期整合**: ```typescript onPageShow() { const params = router.getParams(); if (params?.token) { this.verifyToken(params.token); } } ``` ### 四、常见问题解决 1. **获取不到参数**: - 检查源页面是否使用 `params` 字段传递 - 确认页面路由已在 `main_pages.json` 注册 - 确保目标页面在路由栈中(非 `replaceUrl` 销毁的页面) 2. **参数类型错误**: ```typescript // 类型断言 interface MyParams { id: string; price: number; } const params = router.getParams() as MyParams; ``` 3. **页面刷新保留参数**: ```typescript // 结合本地存储 onPageShow() { const params = router.getParams(); if (params) { AppStorage.setOrCreate('routeParams', params); } } ``` ### 五、使用场景示例 **用户登录跳转**: ```typescript // 登录页面 router.replaceUrl({ url: 'pages/Home', params: { username: 'user123', token: 'abcd1234' } }, router.RouterMode.Single) // 首页接收参数 @State username: string = router.getParams()?.['username'] || ''; ``` [^2] > **注意**:页面栈最大容量为 32,超限会导致参数丢失,建议使用 `router.clear()` 清理栈[^3]。 --- ### 相关问题 1. 路由传递参数时如何保证数据安全性? 2. 如何实现跨页面的实时数据同步(非参数传递)? 3. `router.getParams()` 和 `AppStorage` 在数据传递上的主要区别是什么? 4. 如何处理路由传递的大型对象(如图片数据)? 5. 在页面返回时如何修改历史页面的参数值? > 参考实现基于 OpenHarmony 3.1+ 的路由机制[^1][^2][^3],具体限制详见 [官方路由文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/arkts-routing.md)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值