如何在不显示URL的情况下将参数传递给Angularjs的router-ui?

时间:2018-10-18 22:54:11

标签: angularjs angular-ui-router

我有一个使用ui-router来管理我的应用程序的状态和URL路由的AngularJS应用程序。

这是示例状态:

%>

这是控制器:

.state('my_state', {
    url: '/my_state/:arg1',
    templateUrl: 'http://www.example.com/html/my_file.html',
    controller: 'MyCtrl'
})

这是我从另一个控制器中派人去的方式:

app.controller('MyCtrl', function($stateParams) {
    console.log('arg1 = ', $stateParams.arg1)     
);

执行上面的$state.go('my_state', {'arg1': 'hello'}); 行时,我被发送到该URL $state.go,并且看到以下内容打印在浏览器的调试窗口中:

/my_state/hello

现在这是我的问题:我可以向该控制器添加另一个参数,例如:

  1. 它名为arg1 = hello
  2. 这是可选的。
  3. 如果提供,则可以在arg2内部对其进行访问。
  4. 它没有显示在URL中。

如果是,请告诉我如何操作。

4 个答案:

答案 0 :(得分:1)

.state('someState', {
            url: '/my_state?arg1',
            templateUrl: 'http://www.example.com/html/my_file.html', // I assume this is correct for the way you set it up.
            controller: 'MyCtrl',
            params: { // This is the part you'll add
                arg2: {
                    value: null, // you can set a default value
                    squash: true
                }
            }
})

这应该为您解决问题!我已经使用了很多次了!非常有用。

答案 1 :(得分:1)

默认情况下,UI Router中的

Route参数是可选的。例如,您在代码中(如下)说arg1可选参数。因此/my_state/:arg1/my_state/都可以,但/my_state不能(没有斜杠)。它还会显示URL中的arg1值。

.state('my_state', {
    url: '/my_state/:arg1',
    templateUrl: 'http://www.example.com/html/my_file.html',
    controller: 'MyCtrl'
})

您可以根据自己的喜好向该控制器添加另一个可选参数:

.state('my_state', {
    url: '/my_state/:arg1',
    templateUrl: 'http://www.example.com/html/my_file.html',
    controller: 'MyCtrl',
    params: {
        arg2: { value: null }
    }
})

要隐藏参数,您必须在params中定义它们。

请注意squash属性(在params内)用于配置当当前参数值为当前值时,如何在URL 中表示默认参数值与默认值相同 。如果未设置squash,它将使用配置的默认壁球策略。

Working Plunker

更新

另一个在控制器内部使用$state.go('my_state', {'arg1': 'hello', 'arg2': 'world'});的{​​{3}}。

请注意 对于Working Plunker ui-sref$state.go之间没有功能上的差异

答案 2 :(得分:0)

尝试一下:

.state('my_state', {
    url: '/my_state',
    templateUrl: 'http://www.example.com/html/my_file.html',
    controller: 'MyCtrl',
    params: null
})

答案 3 :(得分:0)

Using Parameters without Specifying Them in State URLs

即使参数未出现在url中,您仍然可以指定要接收的参数。您需要在状态中添加新的字段参数,并按照在链接中使用参数

中的指定创建链接

例如,您拥有州。

.state('contacts', {
        url: "/contacts",
        params: {
            param1: null
        },
        templateUrl: 'contacts.html'
    })

您创建的链接是

<a ui-sref="contacts({param1: value1})">View Contacts</a>

或者您也可以将它们传递给$state.go()

$state.go('contacts', {param1: value1})