AngularJS - параметры состояния не сохраняются в контроллере, использующем ui-route - PullRequest
0 голосов
/ 13 октября 2018

Что мне кажется проблемой, так это использование $state.go(state, params) и сохранение params на контроллере состояния независимо от компонента.Установленный мной plunkr, демонстрирующий это, связан здесь: https://plnkr.co/edit/u5VaMZIBtVoBGbAZaQe0?p=preview

По сути, я делаю настройку двух состояний, одно из которых связано с другим.Я использую $state.go, чтобы перейти в одно из этих состояний с переданными параметрами.Похоже, эти параметры не передаются, и мне интересно, почему это так.

Я использую AngularJS версии 1.6.6 и ui.router версии 0.4.2, если это имеет значение или нет.

var app = angular.module("yay", ['ui.router']);

app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  var states = [
    {
      name: 'paramsDontWork',
      url: '/doesntwork',
      template: '<div>hi{{variable}}</div><a style="color:blue;" ng-click="goto()">goto</a>',
      controller: ['$scope', '$state', '$stateParams', function($scope, $state, $stateParams) {
        $scope.variable = 'hi';
        $scope.goto = function() {
          $state.go('newplace', { should: "should"});
        };
      }],
    },
    {
      name: 'newplace',
      url: '/newplace',
      template: 'new place {{should}} have params<br><a ui-sref="paramsDontWork">hi</a>',
      controller: ['$scope', '$state', '$stateParams', function($scope, $state, $stateParams) {
        console.log($stateParams);
        $scope.should = $stateParams.should;
      }]
    }
  ];

  states.forEach(function(state) {
    $stateProvider.state(state);
  });

  $urlRouterProvider.when('', '/doesntwork');
}]);

1 Ответ

0 голосов
/ 13 октября 2018

Маршруты должны явно указывать любые параметры, которые могут быть перезаписаны (например, переход с другого маршрута) как часть их конфигурации состояния.

Соответствующее руководство из документации UI-Router:

Любые параметры, которые не указаны, будут унаследованы от текущих определенных параметров.Только параметры, указанные в определении состояния, могут быть переопределены, новые параметры будут игнорироваться.

(Выделение мое.)

В вашем примере, /newplaceне указывает свойство params для предоставления дополнительного не-URL-параметра.

Все, что вам нужно сделать, чтобы обеспечить передачу значения should из /doesntwork, - это явное объявление его как части/newplace в качестве параметра с некоторым значением по умолчанию:

{
    name: 'newplace',
    ...
    params: { should: null },
}

Вилка плунжера для демонстрации вышеуказанного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...