Как сгенерировать URL-ссылки с привязкой к url ​​с помощью AngularJS?

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

генерирует ссылки, которые не кодируются URL, если я правильно понимаю. Каков правильный способ кодирования #/search?query={{address}}?

Пример адреса 1260 6th Ave, New York, NY.

Ответ 1

Вы можете использовать собственный encodeURIComponent в javascript. Кроме того, вы можете сделать это в фильтр строк, чтобы использовать его.

Вот пример создания фильтра escape.

JS:

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

HTML:

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

(обновлено: адаптация к ответу Karlies, который использует ng-href вместо plain href)

Ответ 2

Решение @Tosh вернет #/search?query=undefined, если address - undefined в

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

Если вы предпочитаете получать пустую строку вместо этого запроса, вам нужно расширить решение на

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

Это вернет #/search?query=, если address - undefined.

Ответ 3

Вы можете использовать фильтр encodeUri: https://github.com/rubenv/angular-encode-uri

  • Добавьте angular -encode-uri в свой проект:

    bower install --save angular-encode-uri

  • Добавьте его в свой HTML файл:

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

  • Ссылка на него как зависимость для вашего модуля приложения:

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

  • Используйте его в своих представлениях:

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

Ответ 4

Ответ на Tosh имеет идею фильтра точно вправо. Я рекомендую сделать это просто так. Однако, если вы это сделаете, вы должны использовать "ng-href" , а не "href" , так как после "href" до того, как исправления привязки могут привести к плохому ссылка.

Фильтр:

'use strict';

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

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

Вид:

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

Ответ 5

это пример рабочего кода:

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

И в шаблоне:

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