Comment puis-je passer un mot-clé (contenant des caractères spéciaux) comme une application $ routeParam to AngularJS?
$routeProvider.when('/search/:keyword', {templateUrl:'someURL', controller:SearchCtrl})
Ce mot-clé peut contenir des caractères spéciaux.
Donc, j'ai encodingURIComponent au "mot-clé" avant de rediriger vers cette page.
Lorsque ce "mot-clé" comporte des caractères spéciaux tels que "$, @, & comma", etc., le contrôleur s'exécute deux fois.
EX: si le mot-clé possède un symbole '$', le contrôleur
Cela n'arrive pas dans le cas du symbole carat ('^').
Est-ce que je manque quelque part ou mon approche est incorrecte?
En utilisant une solution de rechange pour faire face à ce type de scénario:
utils.encodeUriQuery = function (val) { return encodeURIComponent(val). replace(/%40/gi, '@'). replace(/%3A/gi, ':'). replace(/%24/g, '$'). replace(/%2C/gi, ','). replace(/%26/gi, '&'). replace(/%3D/gi, '='). replace(/%2B/gi, '+'); }
Appel de la fonction ci-dessus avant de passer le mot-clé de recherche à l'URL
$window.location.href = "/#/search/" + utils.encodeUriQuery(searchKeyword);
REMARQUE: utils est une usine.