Подтвердить что ты не робот

Как вернуть $state.current.name из ui-router statechange

Я хотел бы вернуть .state('name'), когда меняю местоположение в angular.

Из моего run() он может вернуть объект $state:

 .run(function($rootScope, Analytics, $location, $stateParams, $state) {
      console.log($state);

working object

, но когда я пытаюсь получить $state.current, это пустой объект

.run(function($rootScope, $location, $stateParams, $state) {

      console.log($state.current);

empty

пример конфигурации:

 .config(function($stateProvider, $urlRouterProvider, AnalyticsProvider) {  
        $urlRouterProvider.otherwise('/');
        $stateProvider
        .state('home', {
            url: '/',
            views: {
              '': {
                templateUrl: 'views/main.html',
                controller: 'MainCtrl'
              },
              '[email protected]': {
                templateUrl: 'views/partials/navigation.html',
                controller: 'NavigationCtrl'
              },
              '[email protected]': {
                templateUrl: 'views/partials/weekly.html',
                controller: 'WeeklyCtrl'
              },
              '[email protected]': {
                templateUrl: 'views/partials/side-panel.html',
                controller: 'SidePanelCtrl'
              },
              '[email protected]': {
                templateUrl: 'views/partials/shop-panel.html',
                controller: 'ShopPanelCtrl'
              },
              '[email protected]': {
                templateUrl: 'views/partials/footer.html',
                controller: 'FooterCtrl'
              }
            }
          })
4b9b3361

Ответ 1

Вы можете прослушивать '$ stateChangeSuccess' и устанавливать состояние accrodingly. Например -

$rootScope.$on('$stateChangeSuccess',
  function(event, toState, toParams, fromState, fromParams) {
    $state.current = toState;
  }
)

Ответ 2

В качестве альтернативы решению Sandeep вы также можете сделать это следующим образом:

angular.module('yourApp').run(['$rootScope', '$state',
    function ($rootScope, $state) {
        $rootScope.$state = $state;
    }
]);

Выполняя это, он устанавливается только один раз вместо каждого stateChange. В основном вы просто храните ссылку на $state где-то - я выбрал $rootScope, чтобы просто сделать этот пример.

Теперь в моем коде я могу легко ссылаться на него как:

<div ng-show="$state.includes('accounting.dashboard')"></div>

и

<div>Current State: {{$state.current.name}}</div>

Я также обычно храню $stateParams, так что у меня есть еще больше информации о состоянии (но я оставил его в этом примере).

Ответ 3

Вы также можете попробовать.

.controller('yourApp', function($scope,$state) {
  $scope.state = $state;

Теперь вы можете войти в консоль.

console.log($state);

Он должен вернуть текущее состояние, в котором вы находитесь.

Или вы можете вызвать область в своем представлении html следующим образом.

{{state.current.name}}

Он также вернет состояние, в котором вы находитесь.

Ответ 4

Если вы хотите, чтобы консоль вашего состояния в контроллере, вы должны консолью следующим образом:

console.log($state.current.name);

И если вы хотите консолью его в представлениях, то:

В контроллере:

$scope.state = $state.current.name;

В шаблоне: напечатайте как

{{state}}