Ответ 1
Вы можете прослушивать '$ stateChangeSuccess' и устанавливать состояние accrodingly. Например -
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams) {
$state.current = toState;
}
)
Я хотел бы вернуть .state('name')
, когда меняю местоположение в angular.
Из моего run()
он может вернуть объект $state
:
.run(function($rootScope, Analytics, $location, $stateParams, $state) {
console.log($state);
, но когда я пытаюсь получить $state.current
, это пустой объект
.run(function($rootScope, $location, $stateParams, $state) {
console.log($state.current);
пример конфигурации:
.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'
}
}
})
Вы можете прослушивать '$ stateChangeSuccess' и устанавливать состояние accrodingly. Например -
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams) {
$state.current = toState;
}
)
В качестве альтернативы решению 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, так что у меня есть еще больше информации о состоянии (но я оставил его в этом примере).
Вы также можете попробовать.
.controller('yourApp', function($scope,$state) {
$scope.state = $state;
Теперь вы можете войти в консоль.
console.log($state);
Он должен вернуть текущее состояние, в котором вы находитесь.
Или вы можете вызвать область в своем представлении html следующим образом.
{{state.current.name}}
Он также вернет состояние, в котором вы находитесь.
Если вы хотите, чтобы консоль вашего состояния в контроллере, вы должны консолью следующим образом:
console.log($state.current.name);
И если вы хотите консолью его в представлениях, то:
В контроллере:
$scope.state = $state.current.name;
В шаблоне: напечатайте как
{{state}}