angularjs - navigationend - router events subscribe angular 4
cómo detectar el cambio de ubicación (2)
¿Vienes al mismo controlador en cambio de ruta? ¿Es así como lo ha definido en $ routeProvider en AppsModule.config? Puede pasar $ routeParams al mismo controlador, si desea un filtrado adicional.
Has inicializado el objeto al inicio de tu controlador. Por lo tanto, una vez que se cambie el enlace, se llamará al mismo controlador y no tendrá que hacer ninguna otra cosa. Según la ruta seleccionada, los artículos se actualizarán.
Tengo un controlador que muestra un menú de navegación de la página. El menú tiene una variedad de elementos, y cada elemento tiene un título y un enlace. También establezco una marca en cada elemento que indica si la página relacionada se muestra actualmente:
module.controller(''MenuContr'', [
/******/ ''$scope'', ''$location'',
function ($scope, $location) {
$scope.items = [
{text: ''page 0'',
href: ''#/page-0'',
current: $location.path() === ''/page-0''},
{text: ''page 1'',
href: ''#/page-1'',
current: $location.path() === ''/page-1''}
];
en mi plantilla:
<ul class="menu" ng-controller="MenuContr" ng-cloak>
<li ng-repeat="item in items" ng-switch on="item.current">
<span class="current" ng-switch-when="true">{{item.text}}</span>
<a ng-switch-default ng-href="{{item.href}}">{{item.text}}</a>
</li>
</ul>
Necesito poder actualizar el menú cuando cambie la ubicación, ¿cómo se hace? ¿Hay algún evento al que me pueda suscribir?
EDITAR: este controlador se usa además de los controladores definidos en mis rutas, y la plantilla anterior se coloca sobre el elemento que contiene la directiva ng-view
.
Para responder a mi propia pregunta, en mi MenuContr
:
$scope.$on(''$routeChangeSuccess'', function () {
var items = $scope.items;
var path = $location.path();
for (var i = 0; i < items.length; i++) {
var item = items[i];
var href = item[''href''];
item[''current''] = !!href && href.substring(1) === path;
}
});