chgbj 2023-10-12 09:57 采纳率: 6.7%
浏览 5
已结题

Angular js的过滤器保留过滤条件

<div class="kmi-list__column head-controls hide" style="flex:1;">
                        <div class="filter" ng-show="dispatch_filterSH.op_name">
                            <input ng-model="dispatch_filter.op_name" id="op_name">
                            <i class="material-icons clear" style="position: absolute;top: 2px;right: 4px;"
                               ng-click="dispatch_filterSH.op_name = false;dispatch_filter.op_name = '';">clear</i>
                        </div>
                        <div class="order" ng-hide="dispatch_filterSH.op_name">
                            <i class="material-icons search" style="z-index:1;" ng-click="dispatch_filterSH.op_name = true">search</i>
                            <label ng-bind="'B0219.list.column11' | translate"></label>
                        </div>
                    </div>
<div class="kmi-list__row" ng-repeat="data in dialog.plotData.workstation_detail | filter: dispatch_filter track by $index"  >

img

这段代码怎么可以在使用Angular js的过滤器的时候,如果在当前页面输入过滤条件,进入新页面再返回当前页面的时候,能保留刚刚的过滤条件?

  • 写回答

7条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-12 15:55
    关注

    【以下回答由 GPT 生成】

    可以使用AngularJS的$rootScope来保存过滤条件并在导航回当前页面时恢复过滤条件。下面是一种可能的解决方案:

    首先,将$rootScope注入到控制器中,并将过滤条件保存在$rootScope上,而不是在控制器的作用域上。在导航离开页面时,将过滤条件保存到本地存储(或会话存储)中。

    app.controller('MyController', ['$scope', '$rootScope', function($scope, $rootScope) {
        // 在控制器中使用$rootScope而不是$scope
        $rootScope.dispatch_filter = {
            op_name: ''
        };
    
        // 在导航离开页面时保存过滤条件到localStorage中
        window.addEventListener('beforeunload', function() {
            localStorage.setItem('dispatch_filter', JSON.stringify($rootScope.dispatch_filter));
        });
    }]);
    

    接下来,在页面加载时,检查localStorage是否存在保存的过滤条件,并在其中找到并恢复它。

    app.run(['$rootScope', function($rootScope) {
        // 在页面加载时恢复过滤条件
        var savedFilter = localStorage.getItem('dispatch_filter');
        if (savedFilter) {
            $rootScope.dispatch_filter = JSON.parse(savedFilter);
        }
    }]);
    

    最后,在HTML代码中,将dispatch_filter修改为$root.dispatch_filter,以便正确访问$rootScope中的过滤条件:

    <input ng-model="$root.dispatch_filter.op_name" id="op_name">
    <i class="material-icons clear" style="position: absolute;top: 2px;right: 4px;"
       ng-click="$root.dispatch_filterSH.op_name = false;$root.dispatch_filter.op_name = '';">clear</i>
    

    这样,当你导航回当前页面时,过滤条件将被恢复,并在输入框中显示。请注意,你需要在每个使用过滤器的页面上实施相同的逻辑。如果不希望使用localStorage,sessionStorage也是一个可行的替代方案。

    希望这能帮到你!如果有任何进一步的问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月23日
  • 已采纳回答 10月18日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图