2013-01-24 40 views

Trả lời

96

Bạn có thể sử dụng mã gốc encodeURIComponent trong javascript. Ngoài ra, bạn có thể biến nó thành bộ lọc chuỗi để sử dụng nó.

Dưới đây là ví dụ về cách tạo bộ lọc escape.

js:

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

html:

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

(Cập nhật: thích nghi với Karlies' câu trả lời trong đó sử dụng ng-href thay vì đơn giản href)

+4

Dường như có vấn đề với thoát, encodeURI và encodeURIComponent (http://stackoverflow.com/a/12796866/377920). Tôi tự hỏi nếu Angular có một số chức năng mã hóa được xây dựng trong chúng ta có thể tận dụng thay thế. Câu trả lời tốt khác. – randomguy

+0

wow. immaculate! thanks @ tosh-shimayama –

+22

Sử dụng encodeURIComponent để thay thế. –

14

Bạn có thể sử dụng bộ lọc encodeUri: https://github.com/rubenv/angular-encode-uri

  1. Thêm góc mã hóa-uri để dự án của bạn:

    bower install --save angular-encode-uri

  2. Thêm nó vào tập tin HTML của bạn:

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

  3. tham khảo nó như là một sự phụ thuộc cho module ứng dụng của bạn:

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

  4. Sử dụng nó trong quan điểm của bạn: Câu trả lời

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

+2

Tôi hoàn nguyên mục này về câu trả lời gốc. Nó hoàn toàn ổn và ai đó đã chỉnh sửa nó hoàn toàn thay đổi ý định. –

+0

Tại sao đi đến độ dài nhập toàn bộ mô-đun bower khi nó dài ba dòng? Một phụ thuộc hoàn toàn không cần thiết ... – toxaq

10

Tosh vừa thể hiện ý tưởng bộ lọc hoàn toàn đúng. Tôi khuyên bạn nên làm như thế. Tuy nhiên, nếu bạn làm điều này, bạn nên sử dụng "ng-href" thay vì "href", vì sau "href" trước khi các kết buộc có thể dẫn đến kết nối xấu.

lọc:

'use strict'; 

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

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

xem:

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

đây là một ví dụ mã làm việc:

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

Và trong mẫu:

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

Đây là bản sao của câu trả lời được chấp nhận với việc bổ sung không cần thiết của một hàm ẩn danh phụ. – toxaq

19

@ giải pháp Tosh sẽ trở #/search?query=undefined nếu address là undefined trong

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

Nếu bạn muốn nhận được một chuỗi rỗng thay cho truy vấn của bạn, bạn cần phải mở rộng các giải pháp cho

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

này sẽ trở lại #/search?query= nếu address không xác định.

Các vấn đề liên quan