Estou usando o roteamento do AngularUI e gostaria de fazer um, ng-class="{active: current.state}"
mas não tenho certeza de como detectar exatamente o estado atual em uma diretiva como esta.
Respostas:
Atualizar:
Esta resposta foi para uma versão muito mais antiga do Ui-Router. Para as versões mais recentes (0.2.5+), use a diretiva helper ui-sref-active
. Detalhes aqui .
Resposta Original:
Inclua o serviço $ state em seu controlador. Você pode atribuir este serviço a uma propriedade em seu escopo.
Um exemplo:
$scope.$state = $state;
Em seguida, para obter o estado atual em seus modelos:
$state.current.name
Para verificar se um estado está ativo no momento:
$state.includes('stateName');
Este método retorna verdadeiro se o estado estiver incluído, mesmo se fizer parte de um estado aninhado. Se você estivesse em um estado aninhado user.details
, e verificasse $state.includes('user')
, ele retornaria verdadeiro.
Em seu exemplo de classe, você faria algo assim:
ng-class="{active: $state.includes('stateName')}"
Se você estiver usando ui-router, tente $ state.is ();
Você pode usá-lo assim:
$state.is('stateName');
Pela documentação:
$ state.is ... semelhante a $ state.includes, mas verifica apenas o nome completo do estado.
O uso da diretiva ui-sref-active que funcionou para mim foi:
<li ui-sref-active="{'active': 'admin'}">
<a ui-sref="admin.users">Administration Panel</a>
</li>
como encontrado aqui sob o comentário rotulado como "tgrant59 comentou em 31 de maio de 2016".
Estou usando o angular-ui-router v0.3.1.
Confira angular-ui, especificamente, verificação de rota: http://angular-ui.github.io/ui-utils/