2013-01-24 11 views

Odpowiedz

96

Możesz użyć natywnego encodeURIComponent w javascript. Można również użyć go do filtrowania ciągów znaków, aby go wykorzystać.

Oto przykład wykonania filtra escape.

JS:

var app = angular.module('app', []); 
app.filter('escape', function() { 
    return window.encodeURIComponent; 
}); 

html:

<a ng-href="#/search?query={{address | escape}}"> 

(aktualizacja: przystosowanie do odpowiedzi Karlies' który wykorzystuje ng-href zamiast zwykłego href)

+4

Wydaje się, że występują problemy z ucieczką, encodeURI i encodeURIComponent (http://stackoverflow.com/a/12796866/377920). Zastanawiam się, czy Angular ma wbudowaną funkcję kodowania, którą możemy wykorzystać. Dobra odpowiedź jest inna. – randomguy

+0

wow. nieskazitelny! dzięki @ tosh-shimayama –

+22

Zamiast tego użyj encodeURIComponent. –

14

można użyć filtra encodeURI: https://github.com/rubenv/angular-encode-uri

  1. Dodaj kątową zakodować-URI do projektu:

    bower install --save angular-encode-uri

  2. go dodać do pliku HTML:

    <script src="bower_components/angular-encode-uri/dist/angular-encode-uri.min.js"></script>

  3. Reference go jako zależność dla modułu aplikacji:

    angular.module('myApp', ['rt.encodeuri']);

  4. Użyj go w widokach: odpowiedź

    <a href="#/search?query={{address|encodeUri}}">

+2

Powróciłem do oryginalnej odpowiedzi. Wszystko było w porządku, a ktoś go zmodyfikował, by całkowicie zmienić intencje. –

+0

Dlaczego warto sięgać do długości importowania całego modułu altany, gdy ma on trzy linie? Całkowicie niepotrzebna zależność ... – toxaq

10

Tosh zawiera ideę dokładnie odpowiedni filtr. Polecam zrobić to tak po prostu. Jednakże, jeśli to zrobisz, powinieneś użyć "ng-href" zamiast "href", ponieważ podążanie za "hrefem" przed rozstrzygnięciem wiązania może skutkować błędnym łączem.

filtr:

'use strict'; 

angular.module('myapp.filters.urlEncode', []) 

/* 
* Filter for encoding strings for use in URL query strings 
*/ 
.filter('urlEncode', [function() { 
    return window.encodeURIComponent; 
}]); 

widok:

<a ng-href="#/search?query={{ address | urlEncode }}" ng-repeat="address in addresses"> 
    {{address}} 
</a> 
5

to przykład kod roboczych:

app.filter('urlencode', function() { 
    return function(input) { 
    return window.encodeURIComponent(input); 
    } 
}); 

I w szablonie:

<img ng-src="/image.php?url={{item.img_url|urlencode}}" 
+0

Jest to duplikat zaakceptowanej odpowiedzi z niepotrzebnym dodatkiem dodatkowej anonimowej funkcji. – toxaq

19

@ rozwiązania Tosh powróci #/search?query=undefined jeśli address jest niezdefiniowane w

<a ng-href="#/search?query={{address | escape}}"> 

Jeśli wolisz, aby uzyskać ciąg pusty zamiast dla zapytania trzeba rozszerzyć rozwiązanie

var app = angular.module('app', []); 
app.filter('escape', function() { 
    return function(input) { 
     if(input) { 
      return window.encodeURIComponent(input); 
     } 
     return ""; 
    } 
}); 

Spowoduje to powrót #/search?query= jeśli address jest niezdefiniowany.

Powiązane problemy