如果AngularJS与值匹配,则会在加载时更改单个URL参数

时间:2016-07-05 15:03:42

标签: javascript angularjs url parameters angular-ui-router

我正在开发一个网络应用,在您浏览网站时参数会传递给视图。这些参数由用户过滤器设置。

我遇到了一个问题,即某些视图不支持其中一个过滤器的特定值,如果发生这种情况,则需要将参数重置为两种可能中的一种。

我一直在使用$location.search({ type: "blue" }),但我已经意识到,如果视图中的url /中有其他参数,那么这些参数将被替换为仅使用该代码设置的参数。

基本上,对于某些观看,如果type参数为all,则需要更改为blue,而其他观看则需要更改为red

不幸的是,此参数是由应用的当前过滤器在链接中设置的,因此它不像更改href那么简单。

您可以在此示例中看到我正在尝试更改只能在设置red的视图中设置为redblue的视图(并且链接)使用路径数组。

for (let i = 0; i < redOnlyViews.length; i++) {
  if (newUrl.indexOf(redOnlyViews[i]) > -1 && type === "blue") {
      $location.path("/" + redOnlyViews[i]).search({type: "red"});
   }
 }

(这是在$rootScope.$on("$locationChangeStart", function (event, newUrl, oldUrl)函数内)

如果有一种改变这样的参数的方法,同时不改变任何其他很棒的参数!

希望这有意义并且谢谢:)

为了匿名而改变了颜色,我没有生气:)

2 个答案:

答案 0 :(得分:2)

如果要设置单个搜索参数,可以执行

$location.search(angular.extend($location.search(), {type: 'red'}))

答案 1 :(得分:0)

理想情况下,对于这种情况,$routeParams用于提取在网址中输入的动态参数。

它的工作原理如下:

  1. 在HTML页面中,形成URL的Anchor标记会将动态参数添加到URL中,如下所示:

  2. 此处{{ }}负责将{{yourModelName.yourModelAttributeKeyName}}的值添加到网址

    1. 然后在$routeProvider配置中,在.when()方法中,URL的路径参数必须像这种情况一样设置:
    2. `myApp.config(function($ routeProvider){     $ routeProvider

      .when('/showColor/:yourModelAttributeValue', {
          templateUrl : 'showColor.html'
      });
      

      });`

      1. 您可以继续添加以下参数:

      2. 然后还相应地更新.when()方法:

        .when('/showColor/:yourModelAttributeValue/:yourModelAttributeAnotherValue', {
            templateUrl : 'showAnotherColor.html'
        });
        
        1. 最后在控制器中,您可以提取:pathParams之类的内容:

          $ scope.firstColor = $ routeParams.yourModelAttributeValue;

          $ scope.secondColor = $ routeParams.yourModelAttributeAnotherValue;