Angular UI路由器声明

时间:2015-07-23 14:24:53

标签: angularjs angular-ui-router

我有两个州。一个状态是具有域的表,第二个状态是关于域的信息。该表具有可应用于表数据的过滤器(下拉选择,下拉复选框)。您可以从触发第二个状态(state1.domain)的表中单击进入域。

我的问题是当我从state1点击进入state1.domain然后点击返回state1如何保存我的过滤数据而不重新初始化控制器?目前,当我点击返回state1时,我的过滤器已被清除,表数据也被清除。

Do While

1 个答案:

答案 0 :(得分:0)

使用服务

您可以将这些值存储在服务中。在控制器初始化时,您只需使用服务中存储的var设置控制器var。

可能是最好的解决方案。

使用会话存储

在我看来,其中一种方法是使用会话存储将导航流中的过滤器存储到您的应用程序中。

在您的控制器中,您将启动过滤器变量,如下所示:

$scope.filterName = sessionStorage.filterName

在每次过滤器更改时,您将保存到sessionStorage值

//In your HTML on the filter
ng-change="onFilterNameChange()"

//In your JS
$scope.onFilterNameChange = function(){
    sessionStorage.filterName = $scope.filterName
}

这就是全部。

如果您希望能够“清理”过滤器,您也可以这样做,您可以管理一个可选的url参数(如?resetFilters = true)来清理过滤器。

使用查询参数

您还可以(如果没有那么多过滤器)在URL中显式设置过滤器,就像这样

.state ('state1', {
    url: '/state1?filter1&filter2&filter3',
    views: {
        "main@": {
            controller: 'StateOneCtrl',
            templateUrl: 'folder/state1.tpl.html'
        }
    },
    ncyBreadcrumb: { label: 'State One' },
    data: { pageTitle: 'State One', showTitle: false}
})

但是你可能会被卡住,因为你不能给URL提供一个对象(而你可以为你的sessionStorage字符串化一个。

希望它有所帮助。