【问题标题】:$stateParams value lost when refresh page in AngularJS在 AngularJS 中刷新页面时 $stateParams 值丢失
【发布时间】:2018-06-01 04:15:58
【问题描述】:

我的网站上有两个页面。一个是EventList,另一个是EventDetail。当我单击 EventList 页面中的任何事件时,它会将我重定向到 EventDetail 页面。我用 Event 的 EventId 来获取详细信息并在 EventDetail Page 中填充相应的数据。当我第一次这样做时,这发生得很好。当我刷新页面时,Event 的 EventId 就消失了。我正在使用 ui-router 将 EventId 作为状态参数传递给 EventDetail 页面。

StateRouter.JS

app.config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider
        .state('home.eventlist', {
            url: '/eventlist',
            views: {
                'homedetailview':
                {
                    templateUrl: 'EventsPages/ListEvent.html',
                    controller: 'ctrlEventList'
                }
            }
        })
        .state('home.eventlist.eventdetail', {
            url: '/eventdetail',
            params: { paramOne: "defaultValueOne" },
            views: {
                'homedetailview@home':
                {
                    templateUrl: 'EventsPages/AddEvent.html',
                    controller: 'ctrlEventContent',

                }
            }
        })
})

EventList.HTML

<form class="form-main">
    <div class="div-main">
        <div class="gridBigStyle" ui-grid="gridEventList" ui-grid-pagination>
        </div>
    </div>
</form>

EventListController.JS

myApp.controller("ctrlEventList", ['$scope', function ($scope) {
    $scope.gridEventList = {
        data: 'eventlistdata',        
        columnDefs: [
            { field: 'SiteEventNumber', displayName: 'Event Number' },           
            { field: 'EventName', displayName: 'Event Name' },            
            { name: 'actions', displayName: 'Actions', cellTemplate: $scope.actions}
        ]
    }

    $scope.actions =
        '<a ui-sref=".eventdetail({paramOne:row.entity.EventId})"></a>';                  
}])

EventDetailController.JS

myApp.controller("ctrlEventContent", ['$scope', '$stateParams', function ($scope, $stateParams) {
    alert($stateParams.paramOne);
}])

当我刷新页面时,它会将警报显示为“defaultValueOne”,这被称为 StateParams 的默认值。

我搜索了网络,发现本地存储可以解决这个问题,但我不知道如何在这里实现以及与其他选项相比有什么缺点。如果在此提供工作示例,那就太好了。

【问题讨论】:

标签: javascript angularjs angular-ui-router


【解决方案1】:

如果您从 Params 获取一些值,那么您可以将该数据存储在 localstorage 或 $rootscope 中(它们中的任何一个都可以帮助您在刷新后保留数据。)实际上 $StateParams 用于将数据从一个发送到另一个所以它在您发送参数时一次只保留一个数据......希望你得到你的观点 谢谢。

【讨论】:

  • Localstorage 更好,但我无法理解在以下情况下它将如何表现的一件事:假设我有控制器页面,我在其中使用 $stateParams 值设置 localstorage 变量。现在,当我在 A 的一个选项卡中打开页面时,localstorage 将存储 X 值,如果我在 B 的另一个选项卡中打开页面,则 localstorage 将存储 Y 值。如果我刷新第一个选项卡,那么我认为它将检索 Y,因为它最后存储并在第一个选项卡中显示 Y 的详细信息。我的担心正确吗?如何克服这种情况?
  • 嗨!如果您无法理解,那么您可以尝试并尝试实时调试您的代码并更改您的选项卡并查看 angularJS 中的 $localStorage 服务会发生什么,您可以看到 localStorage 的值是否已更改... 例如:$localStorage.currentUser = "Hi" 更改选项卡后,您可以看到 currentuser 的值将保持不变。除非您愿意,否则它将一直更改...\
  • 我收到了你的评论。由于 localstorage 将永远保存在磁盘中,因此我需要在注销期间将其清除。这没关系,但如果有人关闭浏览器或关闭选项卡会发生什么。在这种情况下如何删除本地存储。你能帮忙吗?
猜你喜欢
  • 2018-06-04
  • 1970-01-01
  • 2019-09-12
  • 2023-03-03
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2022-11-13
  • 2020-08-28
相关资源
最近更新 更多