在URL上更改$ scope控制器变量

时间:2014-07-11 17:06:05

标签: angularjs angularjs-scope angular-ui-router angularjs-controller

我有一个简单的Web应用程序,它只是一个带有格式化JSON数据的表。单击列时,可以按升序过滤该列。

我希望像这样的行为将网址更改为:

www.website.com/column/asc,

您可以通过这种方式发送链接,当您访问该链接时,该列会按升序自动排序。我一直试图找到一种方法来做到这一点,而我最接近的是ui.router。

但是,我需要更改一个控制器范围变量,这是app.config无法做到的,我错过了什么?有没有更好的方法来完成我需要的东西?

app.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
    var keys = Object.keys(data[0]);

    $urlRouterProvider.otherwise('/');

    for (var i = 0; i < keys.length; i++) {
        $stateProvider.state(keys[i],{
            url:'/'+keys[i],
            controller: function($scope){
                $scope.search = {keys[i]:ascending};
            }
        })
    }

}]);

不幸的是,从这里开始,我不知道应该在哪里继续。大多数文档都使用模板页面,我只想更改控制器变量。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您应该考虑使用UI路由器定义URL参数,然后将$ stateParams服务注入控制器,以便您可以从URL中读取参数。

首先定义你的状态:

$stateProvider.state('search',{
    url: '/search/:searchParam',
    controller: function($scope, $stateParams) {
        $scope.search = $stateParams.searchParam;
    }
});

请注意,我已稍微更改了网址格式。该网址带有唯一字符串(&#39;搜索&#39;),然后是变量参数&#39;:searchParam&#39;。

另外,我们只定义了一个名为&#39; search&#39;的状态,而不是每个参数一个状态。

所以使用以上网址:&#39; / search / asc&#39;将路由到搜索&#39;州,$stateParams.searchParam将评估为&#39; asc&#39;。

答案 1 :(得分:0)

您需要使用$location service

只需通过调用:

在您的网址中设置一个参数
$location.search(keys[i]: 'ascending');