AngularJS:如何根据条件检查在state.go内部选择的URL?

时间:2018-08-24 22:53:44

标签: javascript angularjs

在提出我的问题之前,我知道围绕这个主题有很多主题,但是它们实际上与我的问题没有任何关系。

在我的angularJS应用中,我使用$ stateProvider来切换状态。但是,我的应用程序要求我传递查询字符串参数,并且希望保留它们。

这就是我的做法

$rootScope.$state.go('defaultState', {id: 12});

然后我执行以下操作

$stateProvider.state('defaultState', {
url: /test/?id,
params: { id: {value: ""} },
templateUrl: 'testTemplate.html'
});

所以现在当我切换到我的状态时,可以看到如下网址

/test/?id=12

这就是我想要的,太棒了!

但是,假设在某些情况下我会在不传递参数的情况下调用$rootScope.$state.go('defaultState')。在这种情况下,我将获得如下网址

/test/?id=

哪个很奇怪!我只想在我们检测到参数时添加参数查询字符串!

所以我正在尝试做这样的事情

$stateProvider.state('defaultState', {
url: id ? '/test/id?' : '/test/',
params: { id: {value: ""} }, ..

因此,如果为空,我们选择第二个URL,而不是第一个,但这不起作用,我得到的ID是不确定的。

有没有一种方法可以在不基于条件的情况下又没有第二个状态和第二个$ state.go()的情况下做我想做的事情?

我可以在$ state.go('',{},..)内传递一个变量并检查它而不是检查条件的参数吗?

谢谢

1 个答案:

答案 0 :(得分:1)

  1. 关于here上的查询参数文档, 您的州定义:

    $stateProvider.state('defaultState', {
    url: /test/?id,
    params: { id: {value: ""} },
    templateUrl: 'testTemplate.html'
    });
    

    尝试将两种使用查询参数的技术整合到一个地方。

  2. 但这不是实际问题,仅删除参数就足够了,就像这样:

    $stateProvider.state('defaultState', {
    url: /test/?id,
    templateUrl: 'testTemplate.html'
    });
    
  3. 实际上发生的是,这里params: { id: {value: ""}的这一行将id初始化为零长度的字符串,这也是一个有效的查询参数,因此您可以看到{{1} },实际上这是根据您设置的规则发生的事情。

  4. 此外,/test/?id=可能足以实现与params: { id: ""}相同的目的。因此,如果您在其他地方使用了params,则可能需要对其进行重构,以使其更加简洁。