【问题标题】:Multiple Optional Parameters with Angular JS ( UI-Router)Angular JS(UI-Router)的多个可选参数
【发布时间】:2015-06-17 07:20:16
【问题描述】:

我有一个显示来自 JSON REST Web 服务的产品的页面。不确定这是否是最好的方法,但我正在尝试使用页面上的查询参数来根据 MinPrice 和 MaxPrice 进行过滤(稍后也会添加其他过滤器) - 但是,我无法获得多个参数工作。

例如:

MinPrice 和 MaxPrice 都是可选的。

当我点击 MinPrice 30 时,我得到以下 URL,这很好:

#/minPriceParam=3

如果我然后单击 MaxPrice 60,我希望

#/minPriceParam=30&maxPriceParam=60

然而我真正得到的是

#/maxPriceParam=60 即它丢失了 minPriceParam=30 部分。

这是我的简化代码

<a ui-sref="minPrice({ minPriceParam:30 })">   MinPrice 30</a>
<a ui-sref="maxPrice({ maxPriceParam:60 })">   MaxPrice 60</a>

JS 文件

app.config(function ($stateProvider, $urlRouterProvider) {

$stateProvider

      .state('minPrice', {
        url: '/?minPriceParam&maxPriceParam'

        , controller: function ($scope, $StateParams) 
         {$scope.minimumPrice = $StateParams.min;}
    })

        .state('maxPrice', {
        url: '/?minPriceParam&maxPriceParam'

        , controller: function ($scope, $StateParams) { $scope.maximumPrice = $StateParams.max; }
    })



});

【问题讨论】:

    标签: javascript angularjs url angular-ui-router


    【解决方案1】:

    基于this 示例,我认为您可以将默认参数放在params 部分中:

    <a ui-sref="eitherPrice()">   MinPrice 30</a>
    <a ui-sref="eitherPrice()">   MaxPrice 60</a>
    
    app.config(function ($stateProvider, $urlRouterProvider) {
    
        $stateProvider
            .state('eitherPrice', {
                params {
                    minPriceParam:30,
                    maxPriceParam:60
                }            
                , url: '/?minPriceParam&maxPriceParam'
    
                , controller: function ($scope, $StateParams) {
                  $scope.minimumPrice = $StateParams.minPriceParam;
                  $scope.maximumPrice = $StateParams.maxPriceParam;
                 }
            })
    
    });
    

    【讨论】:

    • 这似乎也不起作用..您的链接是我最初遵循的示例,但不确定为什么它不起作用。
    【解决方案2】:

    您的代码中有一些错误: 首先,您的状态参数名称分别为 minPriceParammaxPriceParam。您无法使用名称 minmax 访问它们。 此外,当您调用 maxPrice 状态时,您必须同时发送 minPriceParammaxPriceParam。请参考以下代码。

    app.config(function ($stateProvider, $urlRouterProvider) {
    
    $stateProvider
      .state('minPrice', {
        url: '/?minPriceParam&maxPriceParam'
        , controller: function ($scope, $stateParams) 
         {$scope.minimumPrice = $stateParams.minPriceParam;}
    })
        .state('maxPrice', {
        url: '/?minPriceParam&maxPriceParam', 
        controller: function ($scope, $stateParams)
        { $scope.minimumPrice = $stateParams.minPriceParam;
          $scope.maximumPrice = $stateParams.maxPriceParam; }
    })
    });
    

    在您的 html 中,您必须在调用 maxPrice 状态时将最低价格作为状态参数发送。

    <a ui-sref="minPrice({ minPriceParam:30 })">   MinPrice 30</a>
    <a ui-sref="maxPrice({ minPriceParam:minimumPrice,maxPriceParam:60 })"> MaxPrice 60</a>
    

    【讨论】:

    • 嗨 - 不,这似乎不起作用..我不确定 $scope.minimumPrice 是否正在进入控制器,因为当我添加 {{ minimumPrice }} 时它什么也没显示..
    • 我需要在状态部分的某处明确说明控制器名称吗?
    • 是的,确实需要这样做,您是否为 minPrice 和 maxPrice 状态创建不同的模板?
    • 模板将是相同的,将控制器添加到 .state 但查询参数仍未在控制器中获取
    猜你喜欢
    • 2016-05-30
    • 2021-06-14
    • 1970-01-01
    • 2016-02-15
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多