2013-01-24 16 views

risposta

96

È possibile utilizzare il codice nativo encodeURIComponent in javascript. Inoltre, è possibile trasformarlo in un filtro stringa per utilizzarlo.

Ecco l'esempio del filtro escape.

JS:

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

html:

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

(aggiornato: adattandosi alla risposta Karlies' che utilizza ng-href invece del semplice href)

+4

Sembra che ci siano problemi con escape, encodeURI e encodeURIComponent (http://stackoverflow.com/a/12796866/377920). Mi chiedo se Angular abbia qualche funzione di codifica incorporata che possiamo sfruttare invece. Buona risposta altrimenti. – randomguy

+0

wow. immacolato! grazie @ tosh-shimayama –

+22

Usa invece encodeURIComponent. –

14

Si potrebbe utilizzare il filtro encodeURI: https://github.com/rubenv/angular-encode-uri

  1. Aggiungere angolare-encode-uri al progetto:

    bower install --save angular-encode-uri

  2. aggiungerlo al tuo file HTML:

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

  3. di riferimento come una dipendenza per il modulo app:

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

  4. Usalo in vostro punto di vista: la risposta

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

+2

Ho ripristinato la risposta originale. Andava perfettamente bene e qualcuno l'ha modificato per cambiare completamente l'intento. –

+0

Perché passare alla lunghezza dell'importazione di un intero modulo Bower quando è lungo tre righe? Una dipendenza completamente non necessaria ... – toxaq

10

di Tosh ha l'idea del filtro esattamente a destra. Raccomando di farlo proprio così. Tuttavia, se si esegue questa operazione, è necessario utilizzare "ng-href" anziché "href", poiché seguire "href" prima che le risoluzioni di associazione possano causare un collegamento errato.

filtro:

'use strict'; 

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

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

vista:

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

questo è un esempio di codice di lavoro:

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

E nel modello:

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

Questo è un duplicato della risposta accettata con l'aggiunta non necessaria di una funzione extra anonima. – toxaq

19

@ La soluzione di Tosh tornerà #/search?query=undefined se address non è definito in

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

Se si preferisce ottenere una stringa vuota, invece, per la query è necessario estendere la soluzione a

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

Ciò restituirà #/search?query= se address non è definito.

Problemi correlati