2013-05-19 6 views
28

मैं एक लामैं angularJS टेम्पलेट से encodeURIComponent कैसे आ सकता हूं?

<a href="#/foos/{{foo.id}}">{{foo.name}}</a> 

हालांकि, foo.id संपत्ति कभी कभी अजीब वर्ण हो सकते हैं ('/') मेरे कोणीय जे एस टेम्पलेट में एक ब्लॉक है। मैं ऐसा कुछ करना चाहता हूं:

<a href="#/foos/{{encodeURIComponent(foo.id)}}">{{foo.name}}</a> 

लेकिन यह काम नहीं करता है? मैं इसे कैसे ठीक करूं?

+0

मैं इस जवाब को देखा। कॉम/ए/14512 9 86/77535 9 - और मैं सोच रहा था - मैं टेम्पलेट में सीधे '' 'एनकोडुरिकॉम्पोनेंट''' का उपयोग क्यों नहीं कर सकता ... स्पष्ट रूप से एक फ़िल्टर की आवश्यकता है। –

उत्तर

63

आपको लगता है कि कॉल encodeURIComponent

जैसे फ़िल्टर बना सकते हैं http://jsfiddle.net/YApdK/

+3

यह सिर्फ एक फ़ंक्शन का उपयोग करने में गलत लगता है लेकिन यह तुरंत काम करता है। –

+0

धन्यवाद, बहुत ही प्रभावशाली उदाहरण एचटीएमएल को जावास्क्रिप्ट को बहुत कम वाक्यविन्यास – bla

+3

के साथ प्रदान करता है जैसा कि @ रिकॉली ने बताया है, आपको यह सुनिश्चित करने के लिए 'href' के 'ng-href'instead का उपयोग करना चाहिए ताकि लिंक क्लिक किए जाने से पहले कोणीय द्वारा प्रदान किया जा सके।आपको 'विंडो' का उपयोग करने के बजाय फ़िल्टर में शायद '$ विंडो' इंजेक्ट करना चाहिए। –

12

पर फिर से काम @jimr के कोड को ध्यान में रखते @aj-richardson, की अनुशंसाएं:

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

फिर

<a href="#/foos/{{foo.id | encodeURIComponent}}">{{foo.name}}</a> 

चल रहा है उदाहरण है।

आप इसे प्रस्तुत करने से पहले डेटा स्वरूपित करने के लिए अभिव्यक्तियों के भीतर फ़िल्टर का उपयोग कर सकते हैं।

एक फ़िल्टर बनाएं:

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

तो फिल्टर लागू:

<a ng-href="#/foos/{{foo.id | encodeURIComponent}}">{{foo.name}}</a> 
  • ng-href सुनिश्चित करें कि लिंक AngularJS द्वारा प्रदान की गई कर रहे हैं इससे पहले कि वे क्लिक किया जा सकता होने के लिए href के बजाय प्रयोग किया जाता है।
  • $window सीधे window का उपयोग करने के बजाय फ़िल्टर में इंजेक्शन दिया गया है।

    आप $window सेवा के माध्यम से वैश्विक window का संदर्भ लेना चाहिए, तो यह, ओवरराइड किया जा सकता हटाया या परीक्षण के लिए मज़ाक उड़ाया। // stackoverflow: -:


संदर्भ http

  1. AngularJS API: $window
  2. AngularJS Developer Guide: filters
  3. AngularJS Developer Guide: expressions
संबंधित मुद्दे