Je voudrais retourner la .state('name')
lorsque je change d'emplacement angulaire.
De ma run()
il peut retourner l'objet $state
:
.run(function($rootScope, Analytics, $location, $stateParams, $state) {
console.log($state);
mais quand j'essaie d'obtenir $state.current
c'est un objet vide
.run(function($rootScope, $location, $stateParams, $state) {
console.log($state.current);
exemple de configuration:
.config(function($stateProvider, $urlRouterProvider, AnalyticsProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
},
'navigation@home': {
templateUrl: 'views/partials/navigation.html',
controller: 'NavigationCtrl'
},
'weekly@home': {
templateUrl: 'views/partials/weekly.html',
controller: 'WeeklyCtrl'
},
'sidepanel@home': {
templateUrl: 'views/partials/side-panel.html',
controller: 'SidePanelCtrl'
},
'shoppanel@home': {
templateUrl: 'views/partials/shop-panel.html',
controller: 'ShopPanelCtrl'
},
'footer@home': {
templateUrl: 'views/partials/footer.html',
controller: 'FooterCtrl'
}
}
})
Vous pouvez écouter '$ stateChangeSuccess' et définir l’état en conséquence. Par exemple -
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams) {
$state.current = toState;
}
)
Comme alternative à la solution de Sandeep, vous pouvez également le faire de la manière suivante:
angular.module('yourApp').run(['$rootScope', '$state',
function ($rootScope, $state) {
$rootScope.$state = $state;
}
]);
En le faisant de cette façon, il ne sera défini qu’une fois au lieu deeverystateChange. En gros, vous stockez simplement une référence à $ state quelque part - j'ai choisi $ rootScope uniquement pour garder cet exemple simple.
Maintenant, dans mon code, je peux facilement le référencer comme:
<div ng-show="$state.includes('accounting.dashboard')"></div>
et
<div>Current State: {{$state.current.name}}</div>
De plus, je stocke généralement aussi $ stateParams, de sorte que j'ai encore plus d'informations sur l'état (mais je l'ai laissé de cet exemple).
Tu peux aussi essayer.
.controller('yourApp', function($scope,$state) {
$scope.state = $state;
Maintenant, vous pouvez vous connecter à votre console.
console.log($state);
Il devrait retourner l'état actuel dans lequel vous vous trouvez.
Ou vous pouvez appeler la portée dans votre vue html comme ceci.
{{state.current.name}}
Il retournera également de l'état dans lequel vous vous trouvez.
Si vous voulez consoler votre état dans le contrôleur, alors vous devriez console comme ça:
console.log($state.current.name);
Et si vous voulez le consoler en vues, alors:
Dans le contrôleur:
$scope.state = $state.current.name;
Dans le modèle: imprimer comme ça
{{state}}