Exposer l'état actuel nom de l'interface utilisateur du routeur

Je suis en train de mettre en œuvre une langue switcher où, si un utilisateur clique sur "de" à partir d'une page donnée sur un "en" côté il les prend à la page du "de" de côté. Si j'ai de la console.dir le $paramètre d'état, il expose les valeurs que je veux avec le "courant" de la propriété de la donnée $état. Si j'essaie de la console.dir $de l'état.courant de se concentrer sur les valeurs que je veux, il ne donne que le parent propriété de l'etat (mes points de vue actuels sont imbriquées).

Actuel de ma réflexion, je suis sur l'url/fr/contenu, et dynamique, je peux avoir mon lang navigation de charge dynamique de la destination appropriée points en une sorte d'attribut de données, choisir ceux avec un custom directive où j'avais lancer un "aller à" et de configurer ma preferedLanguage valeur par angular-translate.

L'essentiel de la question à l'heure actuelle est d'exposer que $nom de l'état - encore une fois, quand tout simplement naviguer sur $état de l'objet en cours donne les valeurs que je veux, mais $courant.etat donne à l'état parent.

Si quelqu'un a une meilleure suggestion de la façon de le faire (dans un angulaire moyen - aucun témoin indésirable) je suis heureux de répondre à vos suggestions.

Merci!

Mise à jour! DES EXEMPLES DE CODE:

Référence de l'objet de mes états:

var urlStates = {
        en: {
            home: {
                name: 'home',
                url: '/en',
                templateUrl: 'templates/'+lang+'/home.html',
                abstract: 'true'
            },
            home_highlights: {
                name:'home.highlights',
                url: '',
                templateUrl: 'templates/'+lang+'/home.highlights.html'
            },
            home_social:
            {
                name: 'home.social',
                url: '/social',
                templateUrl: 'templates/'+lang+'/home.social.html'
            },
            home_map:
            {
                name: 'home.map',
                url: '/map',
                templateUrl: 'templates/'+lang+'/home.map.html'
            }

        };

Mes États:

$stateProvider
        .state(urlStates.en.home)
        .state(urlStates.en.home_highlights)
        .state(urlStates.en.home_social)
        .state(urlStates.en.home_map);

        $locationProvider.html5Mode(true);

})

Contrôleur:

.controller('LandingPage', function($translate, $state){
    this.state = $state;
    this.greeting = "Hello";
});

Et Enfin, la sortie je vois dans les dom:

Avec cette.etat = $état;

{
    "params": {},
    "current": {
        "name": "home.highlights",
        "url": "",
        "templateUrl": "templates/en/home.highlights.html" },
        "transition": null
}

Avec cette.etat = $état.actuel

{
    "name": "",
    "url": "^",
    "views": null,
    "abstract": true
}
  • Quelque chose n'est pas clair pour moi. Vous avez besoin d'accéder à $state.$current.name, mais ne peut la voir lorsque vous déboguez dans console?
  • Si oui, vous pouvez garder une trace de l' $état de l' $rootScope, et assigner un contrôleur pour chaque enfant de l'état: controller: function($rootScope, $scope) { $rootScope.state = $scope.$state; }
  • Merci pour les réponses, le problème est que $état (lors de débogage dans la console) montre que le "courant" de la propriété comme un objet contenant les propriétés adéquates pour l'affichage imbriqué je suis sur. Cependant, lorsque j'essaie t journal de la console $état.actuel.nom de la console précédente journal a montré la valeur correcte - je seulement obtenir le nom du parent $état.
  • Jetez un oeil à ng-translate qui est faite spécialement pour les sites en plusieurs langues: github.com/angular-translate/angular-translate
InformationsquelleAutor motleydev | 2014-08-18