Angularjs ui-router add parent url parameter to current state

Angularjs ui-router add parent url parameter to current state

这是我的应用状态

  .state('app', {
      url: "/?:site_id",
      templateUrl: "/controls/angular/templates/partial/app.html",
      abstract: true
  })
  .state('app.popup', {
    url: "popup",
    templateUrl: "/controls/angular/templates/popup.html",
    controller: 'PopupController'
  })

应用程序根目录(作为抽象的配置)具有我可以在应用程序的所有其他页面中使用的参数 (site_id)。

我有可以更改站点的下拉列表。 如何将站点 url 参数与所有其他存在的参数一起添加到当前页面

只需更改根 site_id 参数。

     var oSelect =  $('#site_select_tag').select2();
        oSelect.on("change", function (e) {
       var curr_site_id = e.val;                                
       $state.go to => ?????????                               
       //scope.site_id = e.val;
       scope.onChange()(e.val);
});

您可以将选项传递给 $statego 方法:

$state.go(to [, toParams] [, options])

https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stategoto--toparams--options

$state.go('myState', {'myParam': myValue});

并且可以在ui-sref上设置参数:

ui-sref='stateName({param: value, param: value})'

https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref

<a ui-sref="myState({'myParam': myValue})">myLink</a>

您可以通过 $state.current.name 访问当前状态,通过 $state.params 访问当前参数,所以您可以这样做:

var params = $state.params;
params.id = 123; // Set new ID
$state.go($state.current.name, params);

如果我对你的理解正确的话,你试图在 $stateProvider 中设置状态数据后对其进行操作。如果是这样,您应该设置自己的状态提供程序,例如 Mean.io do

// $meanStateProvider, provider to wire up $viewPathProvider to $stateProvider
angular.module('mean.system').provider('$meanState', ['$stateProvider', '$viewPathProvider', function($stateProvider,viewPathProvider){
    function MeanStateProvider() {
        this.state = function(stateName, data) {
          if (data.templateUrl) {
            data.templateUrl = $viewPathProvider.path(data.templateUrl);
          }        
          $stateProvider.state(stateName, data);        
          return this;
        };    

        this.$get = function() {
          return this;
        };
    }
    return new MeanStateProvider();
    }]);

谢谢

解决方法很简单

$state.go('.', {site_id: e.val})

保留所有其他参数并设置新参数