Supongamos que está utilizando rutas:
// bootstrap
myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
});
$routeProvider.when('/about', {
templateUrl: 'partials/about.html',
controller: 'AboutCtrl'
});
...
Y en su html, desea navegar a la página acerca de cuando se hace clic en un botón. Una forma sería
<a href="#/about">
... pero parece que ng-click sería útil aquí también.
- ¿Es correcta esa suposición? ¿Se usará ng-click en lugar de ancla?
- Si es así, ¿cómo funcionaría eso? ES DECIR:
<div ng-click="/about">
angularjs
routes
angularjs-routing
angularjs-ng-click
angularjs-ng-route
Robert Christian
fuente
fuente
Respuestas:
Las rutas supervisan el
$location
servicio y responden a los cambios en la URL (generalmente a través del hash). Para "activar" una ruta, simplemente cambie la URL. La forma más fácil de hacerlo es con etiquetas de anclaje.No se necesita nada más complicado. Sin embargo, si debe hacer esto desde el código, la forma correcta es mediante el uso del
$location
servicio:Que, por ejemplo, un botón podría desencadenar:
fuente
path
yhash
sirven para dos propósitos diferentes, pero dependiendo de las circunstancias puede tener el mismo efecto. Para la mayoría de los casos, para un enrutamiento estricto (especialmente conhtml5mode
habilitado),path
será la opción canónica. Actualicé la respuesta para reflejar esto./
. Si está sirviendo la aplicación desde/app/index.html
, entonces esto no funcionará porque la URL absoluta es/app/next.html
. Obviamente también, el servidor debe estar configurado para devolver suindex.html
archivo cuando se golpea en/next.html
. Siéntase libre de publicar un Plunker / Fiddle si quiere que le eche un vistazo.go
método a cada controlador? (¿O crear un controlador raíz con ungo
método?)<button click-go="/home">Click</button>
. La función de enlace solo sería esta:element.on("click", function () { $location.path(attrs.clickGo); });
Aquí hay un gran consejo que nadie mencionó. En el controlador en el que se encuentra la función, debe incluir el proveedor de ubicación:
fuente
El uso de un atributo personalizado (implementado con una directiva) es quizás la forma más limpia. Aquí está mi versión, basada en las sugerencias de @Josh y @ sean.
Tiene algunas características útiles, pero soy nuevo en Angular, por lo que probablemente haya margen de mejora.
fuente
clickLink
atributo cambia, la directiva agregará el nuevo controlador de clics pero dejará el anterior en su lugar. El resultado podría ser un poco caótico. Originalmente escribí esto para usarlo en una situación en la que elclickLink
atributo nunca cambiaría, por lo que nunca até este extremo suelto. Creo que corregir este error en realidad conduciría a un código más simple. Podría intentar hacerlo cuando tenga tiempo (¡ja!)attrs.$observe
estaba allí. Gracias por sus sugerenciasRecuerde que si usa ng-click para el enrutamiento, no podrá hacer clic con el botón derecho en el elemento y elegir 'abrir en una pestaña nueva' o presionar Ctrl haciendo clic en el enlace. Intento usar ng-href cuando se trata de navegación. ng-click es mejor usar en botones para operaciones o efectos visuales como colapso. Pero no lo recomendaría. Si cambia la ruta, es posible que deba cambiar en muchos lugares de la aplicación. Tener un método que devuelva el enlace. Ej: Acerca de. Este método lo colocas en una utilidad
fuente
Utilicé la
ng-click
directiva para llamar a una función, al solicitar route templateUrl, para decidir cuál<div>
debe sershow
ohide
dentro de la página route templateUrl o para diferentes escenarios.AngularJS 1.6.9
Veamos un ejemplo, cuando estoy en la página de enrutamiento, necesito agregar
<div>
o editar<div>
, lo cual controlo usando los modelos de controlador principal$scope.addProduct
y$scope.editProduct
booleano.RoutingTesting.html
TestingPage.html
ambas páginas:
RoutingTesting.html
(padre),TestingPage.html
(página de enrutamiento) están en el mismo directorio,Espero que esto ayude a alguien.
fuente
Otra solución pero sin usar ng-click que todavía funciona incluso para otras etiquetas que no sean
<a>
:De esta manera, también puede pasar parámetros a su ruta: https://stackoverflow.com/a/40045556/838494
(Este es mi primer día con angular. Se aceptan comentarios amables)
fuente
Puedes usar:
Si desea alguna variable dinámica dentro de href , puede hacer lo siguiente:
Donde link es variable de alcance angular.
fuente
ng-click
para cambiar la ubicación.simplemente hazlo de la siguiente manera en tu escritura html:
Y en su controlador, agregue $ state de la siguiente manera:
fuente