我有一个使用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
现在这是我的问题:我可以向该控制器添加另一个参数,例如:
arg1 = hello
。arg2
内部对其进行访问。如果是,请告诉我如何操作。
答案 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)
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,它将使用配置的默认壁球策略。
更新
另一个在控制器内部使用$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})