Angular ui.router state.go('statename') не работает

Это определение angular.ui.router

app.config([
  '$stateProvider',
  '$urlRouterProvider',
  function($stateProvider, $urlRouterProvider){
    $urlRouterProvider.otherwise('/');
      $stateProvider.state('/login',{
          url: "/",
          controller: 'Login',
          templateUrl: 'login.html'
      })
      .state('/useractivities',{
          url: "/activities",
          controller: 'activitiesController',
          templateUrl: 'useractivities.html'
      })
  }
]);

В контроллере входа я выполняю

$state.go('useractivities', {});

Это дает ошибку "Не удалось разрешить" useractivities "из состояния" /"

Я пробовал несколько вещей вроде

$location.url('useractivities') 

но не повезло, может ли кто-нибудь сказать мне, что происходит не так?

Ответ 1

Проблема здесь в том, что параметр to вызова $state.go() должен быть существующим состоянием name. И 'activities' не существует имени... это '/activities'

Я бы сначала предложил использовать разные имена состояний:

$stateProvider
  // instead of this
  // .state('/',{
  // let use this state name      
  .state('login',{          // this is a STATE Name
      url: "/",
      controller: 'Login',
      templateUrl: 'login.html'
  })
  // instead of this
  // .state('/activities',{
  // use this
  .state('activities',{      // this is a STATE Name
      url: "/activities",
      controller: 'activitiesController',
      templateUrl: 'useractivities.html'
  })

И тогда это будет работать

$state.go('activities', {}); // we use STATE Name here
$state.go('login', {});      // also state name...

Подробнее читайте здесь:

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

to

Строковое абсолютное имя состояния или путь относительного состояния

Имя состояния, которое будет перенесено в или относительный путь состояния. Если путь начинается с ^ или. то оно относительное, в противном случае оно является абсолютным.

Некоторые примеры:

$state.go('contact.detail') will go to the 'contact.detail' state
$state.go('^') will go to a parent state.
$state.go('^.sibling') will go to a sibling state.
$state.go('.child.grandchild') will go to a grandchild state.

Ответ 2

Эта проблема также может возникнуть, если вы попытаетесь использовать ".". в вашем государственном названии. Например.

$stateProvider.state("Activities.Details", { url: ... })
...
$state.go("Activities.Details");

Если вы используете символ "_" или какой-либо другой незарезервированный символ, он будет работать нормально.

$stateProvider.state("Activities_Details", { url: ... })
...
$state.go("Activities_Details");