Supposons que vous utilisez des itinéraires:
// 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'
});
...
Et dans votre html, vous souhaitez accéder à la page à propos lorsqu'un bouton est cliqué. Une façon serait
<a href="#/about">
... mais il semble que ng-click serait utile ici aussi.
- Cette hypothèse est-elle correcte? Que ng-click soit utilisé à la place de l'ancre?
- Si oui, comment cela fonctionnerait-il? C'EST À DIRE:
<div ng-click="/about">
angularjs
routes
angularjs-routing
angularjs-ng-click
angularjs-ng-route
Robert Christian
la source
la source
Réponses:
Les itinéraires surveillent le
$location
service et répondent aux changements d'URL (généralement via le hachage). Pour "activer" un itinéraire, vous changez simplement l'URL. La façon la plus simple de le faire est d'utiliser des balises d'ancrage.Rien de plus compliqué n'est nécessaire. Si, cependant, vous devez le faire à partir du code, la bonne façon est d'utiliser le
$location
service:Ce qui, par exemple, pourrait déclencher un bouton:
la source
path
ethash
servent à deux fins différentes, mais selon les circonstances peuvent avoir le même effet. Dans la plupart des cas, pour un routage strict (en particulier avechtml5mode
activé), cepath
sera le choix canonique. J'ai mis à jour la réponse pour refléter cela./
. Si vous diffusez l'application depuis/app/index.html
, cela ne fonctionnera pas car l'URL absolue est/app/next.html
. Évidemment, le serveur doit également être configuré pour renvoyer votreindex.html
fichier lorsqu'il est atteint/next.html
. N'hésitez pas à poster un Plunker / Fiddle si vous voulez que j'y jette un œil.go
méthode à chaque contrôleur? (Ou créer un contrôleur racine avec unego
méthode?)<button click-go="/home">Click</button>
. La fonction de lien ne serait que celle-ci:element.on("click", function () { $location.path(attrs.clickGo); });
Voici un excellent conseil que personne n'a mentionné. Dans le contrôleur dans lequel se trouve la fonction, vous devez inclure le fournisseur de localisation:
la source
L'utilisation d'un attribut personnalisé (implémenté avec une directive) est peut-être le moyen le plus propre. Voici ma version, basée sur les suggestions de @Josh et @ sean.
Il a quelques fonctionnalités utiles, mais je suis nouveau dans Angular, il y a donc probablement matière à amélioration.
la source
clickLink
attribut change, la directive ajoute le nouveau gestionnaire de clics mais laisse l'ancien en place. Le résultat pourrait être un peu chaotique. À l'origine, j'ai écrit ceci pour l'utiliser dans une situation où l'clickLink
attribut ne changerait jamais, donc je n'ai jamais attaché cette extrémité lâche. Je pense que la correction de ce bogue conduirait en fait à un code plus simple - je pourrais essayer de le faire quand j'ai le temps (ha!)attrs.$observe
était là. Merci pour vos suggestions.N'oubliez pas que si vous utilisez ng-click pour le routage, vous ne pourrez pas cliquer avec le bouton droit sur l'élément et choisir «ouvrir dans un nouvel onglet» ou ctrl en cliquant sur le lien. J'essaie d'utiliser ng-href en matière de navigation. ng-click est préférable d'utiliser sur les boutons pour les opérations ou les effets visuels comme l'effondrement. Mais à propos, je ne recommanderais pas. Si vous changez l'itinéraire, vous devrez peut-être changer beaucoup de place dans l'application. Avoir une méthode renvoyant le lien. ex: À propos. Cette méthode que vous placez dans un utilitaire
la source
J'ai utilisé la
ng-click
directive pour appeler une fonction, tout en demandant route templateUrl, pour décider laquelle<div>
doit êtreshow
ou à l'hide
intérieur de la page route templateUrl ou pour différents scénarios.AngularJS 1.6.9
Voyons un exemple, lorsque dans la page de routage, j'ai besoin de l'ajout
<div>
ou de la modification<div>
, que je contrôle à l'aide des modèles de contrôleur parent$scope.addProduct
et$scope.editProduct
booléen.RoutingTesting.html
TestingPage.html
les deux pages -
RoutingTesting.html
(parent),TestingPage.html
(page de routage) sont dans le même répertoire,J'espère que cela aidera quelqu'un.
la source
Une autre solution mais sans utiliser ng-click qui fonctionne toujours même pour d'autres balises que
<a>
:De cette façon, vous pouvez également transmettre des paramètres à votre itinéraire: https://stackoverflow.com/a/40045556/838494
(Ceci est mon premier jour avec angulaire. Une rétroaction douce est la bienvenue)
la source
Vous pouvez utiliser:
Si vous voulez une variable dynamique à l'intérieur de href, vous pouvez faire comme ceci:
Où lien est une variable de portée angulaire.
la source
ng-click
pour changer d'emplacement.faites-le comme suit dans votre écriture html:
Et dans votre contrôleur, ajoutez $ state comme suit:
la source