Passer URL $routeParam en application AngularJS
Comment puis-je passer l'URL réelle (avec des barres obliques, des virgules, etc.) $routeParam à AngularJS App?
cela va fonctionner:
http://paprikka.github.io/le-bat/#/preview/asdadasda
ce ne sera pas:
http://paprikka.github.io/le-bat/#/preview/http://page.com
ne le fera ce:
http://paprikka.github.io/le-bat/#/preview/http%3A%2F%2Fpage.com
ou ce:
http://paprikka.github.io/le-bat/#/preview/?url=http%3A%2F%2Fpage.com
Détails
AngularJS mécanisme de routage, de par sa conception ne permet pas de passer des chaînes de caractères avec des barres obliques, comme les paramètres de la requête. Je peux comprendre le raisonnement derrière cette décision, nous ne voulons pas créer un serveur sans état (stateless ici.
Cependant, il ya encore des cas lors de l'utilisation de différents séparateurs ou des expressions régulières dans les itinéraires peuvent être nécessaires.
J'ai voulu créer une application qui prend une url de hachage paramètre de chaîne et les charges de son contenu d'une iframe (lien ici). Les itinéraires sont mis en place dans jolie manière standard (je suis en utilisant Coffeescript, mais cet extrait ne diffère pas de la pure js):
$routeProvider
.when('/preview/:src', {templateUrl: 'partials/preview.html',
controller: 'PreviewCtrl'})
.when('/preview', {templateUrl: 'partials/preview.html',
controller: 'PreviewCtrl'})
Bien sûr, je peux charger l'url de hachage avant AngularJS obtient bootstrap et puis la passer à la bibliothèque, mais ce serait bien si je pouvais également mise à jour en cours de route paramètre lors de la modification de données dans le champ d'application - c'est pourquoi je pense qu'il est mieux de ne pas éviter AngularJS API.
Hm.. j'ai mis à jour la question avec une plus laconique description du problème. Regardez le lien que j'ai ajouté (j'espère que cela ne sera pas considéré comme du spam:))
Ne pourriez-vous utiliser la requête-param style de codage? Comme
http://example.com/#/preview/?url=http://page.com
. Voir aussi: docs.angularjs.org/api/ng.$routeParamsEh bien, je ne voudrais pas lui demander si je pouvais:) Avez-vous vérifier la démo? Et, bien sûr - j'ai lu les docs.
Ah, bien sûr, le problème est ici! Avez-vous essayé de se soustraire à l'url avec
encodeURIComponent
? Résultats dans quelque chose comme http://example.com/#/preview/?url=http:%3A%2F%2Fpage.com
OriginalL'auteur Rafal Pastuszak | 2013-04-27
Vous devez vous connecter pour publier un commentaire.
À l'aide de $routeProvider Angulaire 1.2, vous pouvez passer une url si c'est à la fin du chemin d'accès par l'ajout d'un astérisque. pour le patron. Le suivant devrait fonctionner si oui ou non vous URLComponentEncode l'url.
La route:
Le contrôleur:
Puis dans votre modèle:
OriginalL'auteur mattwad
Ok, j'ai réussi à trouver une solution de travail avec la version stable actuelle (@1.0.7).
Façon actuelle de la gestion de ce problème impliquera $route liés à des événements, l'analyse angulaire incompatible avec les url à la volée et de les manipuler via un service supplémentaire qui travaillent dans une manière semblable à $http interception.
Vous pouvez voir le travail des exemples de code ici: http://embed.plnkr.co/fIA2xj/preview
Principales étapes
/url/
Code
Créer angulaire application module comme d'habitude
URL Intercepteur de service (singleton)
Contrôleurs
Deux choses que vous devriez vous rappeler:
OriginalL'auteur Rafal Pastuszak
J'ai une solution mais je ne sais pas si cela vous aide. Angulaires documention http://docs.angularjs.org/api/ng.$emplacement emplacement $a une fonction de recherche(la recherche, paramValue)
Pour passer le paramètre:
De lire le paramètre:
Bien sûr, vous avez besoin d'injecter $emplacement de dépendance
OriginalL'auteur jtello
J'ai mélangé à la recherche params avec les routes. Votre recherche doit venir avant vos itinéraires.. spécifiquement pour les anciens navigateurs. Je pense que ie7 exploser si elle n'est pas
url/?search/#/hash
Essayer ce format:
OriginalL'auteur Nawlbergs