डबल कर्ली ब्रेसिज़ के साथ एंगुलरजेएस-ट्विग संघर्ष


198

जैसा कि आप जानते हैं, दोनों कोणीय और टहनी में सामान्य नियंत्रण निर्माण होता है - डबल घुंघराले ब्रेसिज़। मैं कोणीय के डिफ़ॉल्ट मान को कैसे बदल सकता हूं?

मुझे पता है कि मैं इसे ट्विग में कर सकता हूं, लेकिन कुछ परियोजनाओं में मैं केवल जेएस नहीं कर सकता।



10
मूंछ पागलपन के लिए एक और टहनी-विशिष्ट समाधान verbatimटैग का उपयोग करना है ; उदाहरण के लिए: {% verbatim %}{{ angular_var }}{% endverbatim %}AngularJS के लिए अपनी मूंछों को संरक्षित करने के लिए: twig.sensiolabs.org/doc/tags/verbatim.html
Enright

प्रश्न के लेखक के लिए नहीं, बल्कि भविष्य के पाठकों के लिए: यदि आप इस प्रश्न का उत्तर ढूंढ रहे हैं, तो सर्वर साइड पर रेंडर करने वाले टेंपरेचर से बचने के लिए विचार करें, यदि आप इसे वहन कर सकते हैं (यदि आपकी मुख्य सामग्री प्रमाणित क्षेत्र के अंदर है या आप मुख्य खोज इंजन हैं ट्रैफ़िक के स्रोत के रूप में Google है (वे JS SPA को पार्स कर सकते हैं))।
ओजेड_

1
@OZ_ AngerJS और लाइक के खिलाफ सर्च इंजन तर्क prerender.io जैसी सेवाओं का उपयोग करते समय काफी बेमानी हो जाता है ।
ई। सुंदरिन

जवाबों:


287

आप interpolateProviderसेवा का उपयोग करके प्रारंभ और अंत प्रक्षेप टैग को बदल सकते हैं । इसके लिए एक सुविधाजनक स्थान मॉड्यूल आरंभीकरण समय पर है।

angular.module('myApp', []).config(function($interpolateProvider){
    $interpolateProvider.startSymbol('{[{').endSymbol('}]}');
});

https://docs.angularjs.org/api/ng/provider/$interpolateProvider


5
मैं [[]] का उपयोग नहीं करूंगा, हालांकि। यह कुछ बाइंडिंग में खराब हो सकता है, जैसे कि यह एक:[[myObject[myArray[index]]
एंड्रयू जॉसलिन

1
सच। मैं {[{}]}Django के साथ उपयोग करता हूं, हालांकि यह टाइप करने के लिए थोड़ा अजीब है। मैंने जवाब अपडेट कर दिया है।
abhaga

4
धन्यवाद! जेकेल / तरल और कोणीय जेएस के साथ एक समान मुद्दे में भाग गया। मैंने {[और]} का विकल्प चुना।
jfroom

7
क्या लाइन 3 पर} के बाद अर्धविराम की जरूरत नहीं है?
कैशआईस्केल

क्या एंगुलर में वैश्विक स्तर पर ऐसा करने का कोई तरीका है? हमारी वेबसाइट में कई, कई अलग-अलग पृष्ठों पर कई मॉड्यूल होंगे, और हम ऐसा करना नहीं भूलना चाहते हैं।
theY4Kman 16

89

यह प्रश्न उत्तर दिया हुआ प्रतीत होता है, लेकिन एक अधिक सुरुचिपूर्ण समाधान जिसका उल्लेख नहीं किया गया है, बस टहनी घुंघराले ब्रेसिज़ के बीच उद्धरण चिह्नों में घुंघराले ब्रेसिज़ को संलग्न करना है, जैसे:

{{ '{{myModelName}}' }}

यदि आप सामग्री के लिए एक चर का उपयोग कर रहे हैं, तो इसके बजाय यह करें:

{{ '{{' ~ yourvariable ~ '}}' }}

आपको सिंगल कोट्स का इस्तेमाल करना चाहिए , डबल कोट्स का नहीं। डबल कोट्स टहनी द्वारा स्ट्रिंग प्रक्षेप को सक्षम करते हैं इसलिए आपको सामग्री के साथ अधिक सावधान रहना होगा, खासकर यदि आप अभिव्यक्ति का उपयोग कर रहे हैं।


यदि आप अभी भी उन सभी घुंघराले ब्रेस को देखकर नफरत करते हैं, तो आप इस प्रक्रिया को स्वचालित करने के लिए एक सरल मैक्रो भी बना सकते हैं:

{% macro curly(contents) %}
   {{ '{{' ~ contents ~ '}}' }}
{% endmacro %}

इसे एक फ़ाइल के रूप में सहेजें और इसे अपने टेम्पलेट में आयात करें। मैं ngनाम के लिए उपयोग कर रहा हूं क्योंकि यह छोटा और मीठा है।

{% import "forms.html" as ng %}

या आप अपने टेम्प्लेट के शीर्ष पर मैक्रो डाल सकते हैं और इसे _self के रूप में आयात कर सकते हैं (यहां देखें) :

{% import _self as ng %}

फिर इसे निम्नानुसार उपयोग करें:

{{ ng.curly('myModelName') }}

यह आउटपुट:

{{myModelName}}

... और उन लोगों के लिए एक अनुवर्ती है जो टहनी के साथ-साथ माउंटमॉल का उपयोग करते हैं । एमटीएएमईएएल सामान्य तरीके से एंगुलरजेएस करी का उपयोग करने में सक्षम बनाता है क्योंकि कोई भी ट्विग कोड एक्सेस किया जाता है - और {{}} के बजाय। उदाहरण के लिए:

सादा HTML + AngularJS:

<tr ng-repeat="product in products">
   <td> {{ product.name }} </td>
</tr>

माउंटहेमल + एंगुलरजेएस:

%tr(ng-repeat="product in products")
   %td {{ product.name }}

माउंटहेमल-शैली ट्विग के साथ माउंटमनल + एंगुलरजेएस:

- set twigVariable = "somevalue"
= twigVariable
%tr(ng-repeat="product in products")
   %td {{ product.name }}

6
यह शायद सबसे सुखद तरीका नहीं है, लेकिन मुझे लगता है कि संगतता मुद्दे के बारे में चिंता न करने का एकमात्र तरीका है। ईथर को कोणीय या टहनी {{को संशोधित करने से संगतता समस्या या खराब पोर्टेबिलिटी बन सकती है।
लेओ बेनोनिस्ट

1
प्रदान किया गया समाधान केवल मेरे लिए काम करना शुरू कर दिया था जब मैंने ऐसा किया था {{'{{contact.name}\}'}} जो {{contact.name}}मैं चाहता था प्रिंट करता है
टिमो हुओवेनन

37

जैसा कि Django और AngularJS के बारे में समान प्रश्न में उल्लेख किया गया है, डिफ़ॉल्ट प्रतीकों (टहनी या AngularJS में) को बदलने के साथ ट्रिक तृतीय-पक्ष सॉफ़्टवेयर के साथ असंगति प्रदान कर सकती है, जो इन प्रतीकों का उपयोग करेगा। मुझे Google में सबसे अच्छी सलाह मिली: https://groups.google.com/d/msg/symfony2/kyebufz4M00/8VhF1KWsSAEJ

TwigBundle lexer delimiters के लिए एक कॉन्फ़िगरेशन प्रदान नहीं करता है क्योंकि उन्हें बदलने से आपको साझा बंडल द्वारा प्रदान किए गए किसी भी टेम्पलेट का उपयोग करने से मना किया जाएगा (स्वयं TwigBundle द्वारा प्रदान किए गए अपवाद टेम्पलेट सहित)।

हालांकि, आप सभी घुंघराले ब्रेस से बचने के दर्द से बचने के लिए अपने कोणीय टेम्पलेट्स के आसपास कच्चे टैग का उपयोग कर सकते हैं: http://twig.sensiolabs.org/doc/tags/raw.html - Christophe | Stof

टैग का नाम बदलकर वर्बेटिम कर दिया गया


6
कृपया ध्यान दें कि टहनी के कच्चे फिल्टर के साथ भ्रम से बचने के लिए कच्चे टैग को "वर्बेटिम" नाम दिया गया है।
स्टेदेके

3
यह मेरी राय में सबसे साफ तरीका है।
कीमिको घोस्ट

27

आप विशेषता-आधारित निर्देश का भी उपयोग कर सकते हैं <p ng-bind="yourText"></p>जैसे कि है<p>{{yourText}}</p>


4
यह वास्तव में बेहतर समाधान होना चाहिए।
Alain Jacomet Forte

5
कैसे attr पर इसे उपयोग करने के लिए, जैसे <li id={{item.id}}></li>?
gkiwi

इससे भी बेहतर होगा <p data-ng-bind="yourText"></p>कि HTML को वैध बनाने के लिए इस्तेमाल किया जाए
Jean-Marc Zimmer

24

आप इसका उपयोग \{{product.name}}हैंडलबार्स द्वारा अनदेखा करने के लिए कर सकते हैं और इसके बजाय कोणीय द्वारा उपयोग किया जा सकता है।


यह वास्तव में उपयोगी था
एडन

अच्छा समाधान - बस आरक्षित वर्ण से बचें, यह भी Handlebars में काम करता है
एक डैरेन

22

यह सबसे अच्छे उत्तरों का एक संकलित संस्करण है और शब्दशः ब्लाकों के लिए एक उदाहरण है:

एकल सम्मिलन के लिए, उपयोग करें:

{{ '{{model}}' }}

या यदि आप एक टहनी चर का उपयोग करते हैं

{{ '{{' ~ twigVariableWitModelName ~ '}}' }}

शब्दशः , कई कोणीय चरों के लिए बहुत ही सुंदर और पठनीय है:

<table ng-table>
    {% verbatim %}
        <tr ng-repeat="user in $data">
        <td data-title="'Name'">{{user.name}}</td>
        <td data-title="'Age'">{{user.age}}</td>
        </tr>
    {% endverbatim %}
</table>

आह, यह मेरे लिए जीवन रक्षक था। मैं फ़िल्टर के अंदर {{param}} का उपयोग नहीं कर सका: {{{param}}: $ select.search} और आपके समाधान ने इसे ठीक कर दिया। धन्यवाद
balron

19

यदि आप मौजूदा कोणीय वाक्यविन्यास के टेम्प्लेट टैग को बदलने में रुचि नहीं रखते हैं जो आपके मौजूदा कोणीय टेम्पलेट्स के कुछ भ्रामक पुनर्लेखन की आवश्यकता होगी।

एक बस कोणीय टैग के साथ टहनी टेम्पलेट टैग का उपयोग कर सकते हैं जैसे:

{% verbatim %}{{yourName}}{% endverbatim %}

यह एक और इसी तरह के धागे के जवाब पर मिला : एक symfony2 आवेदन पर Angularjs


1
@ThomasReggi ओपी टहनी के लिए एक समाधान के लिए पूछ रहा है। अन्य उत्तरों की जाँच करें जो तरल के लिए भी काम कर सकते हैं।
नोएल लेवलेरेस

18

वैकल्पिक रूप से आप Twig द्वारा उपयोग किए गए वर्णों को बदल सकते हैं। इसे Twig_Lexer द्वारा नियंत्रित किया जाता है

$twig = new Twig_Environment();

$lexer = new Twig_Lexer($twig, array(
    'tag_comment'   => array('[#', '#]'),
    'tag_block'     => array('[%', '%]'),
    'tag_variable'  => array('[[', ']]'),
    'interpolation' => array('#[', ']'),
));
$twig->setLexer($lexer);

बहुत मददगार। धन्यवाद।
एनोस के। माज़ो

17

इस पोस्ट के अनुसार आपको इसे इस तरह से करने में सक्षम होना चाहिए:

angular.module('app', [])
  .config(['$interpolateProvider', function ($interpolateProvider) {
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
  }]);

2
मुझे ये कोड कहां रखने चाहिए? | ओह! मुझे मिल गया है, मुझे एनजी-ऐप = ऐप बनाना है
zx1986

बस AngularJS और Laravel 4 के भीतर से शुरू करके मैंने फ्रेमवर्क को लोड किया और फिर {{2 + 2}} को देखने के लिए जोड़ा - इसके अलावा और कुछ भी इसका मूल्यांकन नहीं किया गया। मैंने इसे बदलने के लिए कोड कहां रखा है [2+] 2]]? मैंने इसे एक ही पृष्ठ पर स्क्रिप्ट टैग के बीच जोड़ने और एनजी-ऐप = "myApp" को युक्त div टैग में जोड़ने की कोशिश की है, लेकिन यह काम नहीं करता है।
पर्किन 5

इसे आपकी जावास्क्रिप्ट में रखा जाना चाहिए, उसी जगह नियंत्रकों को परिभाषित किया गया है। एक कामकाजी उदाहरण के लिए, script.js टैब में प्रलेखन ( docs.angularjs.org/api/ng.$interpolateProvider ) देखें।
ओलिवियर.रोगर

2
सावधानी का एक शब्द, मैं कोणीय के लिए डबल वर्ग ब्रैकेट का उपयोग कर रहा था, लेकिन मैं सिर्फ Django संदेश ढांचे के साथ एक समस्या में भाग गया। संदेश एक कुकी बनाता है जिसमें [[]] और कोणीय इसे पार्स करने की कोशिश करता है और इस प्रक्रिया में चुटकुले बनाता है। मैंने संदेशों के लिए सत्र संग्रहण पर स्विच करने का प्रयास किया है, लेकिन एक ही समस्या। मैंने ट्रिपल वर्ग कोष्ठक पर स्विच किया।
डस्टिन

2

मुझे @pabloRN पसंद है, लेकिन मैं पी के बजाय स्पैन का उपयोग करना पसंद करूंगा, क्योंकि मेरे लिए पी परिणाम में लाइन जोड़ देगा।

मैं इसका उपयोग करूंगा:

<span ng-bind="yourName"></span>

मैं दोहरे उद्धरण के अंदर कर्सर के साथ aText का भी उपयोग करता हूं ताकि मुझे बार-बार पूरी बात को फिर से लिखना न पड़े।


वास्तव में एनजी-
बिंद

@wesamly आप किसी भी टैग का उपयोग कर सकते हैं, लेकिन <span>आपके पास अन्य सामग्री होने पर इनलाइन टेक्स्ट के लिए उपयोग किया जाता है। उदाहरण के लिए:<h1>Welcome <span ng-bind="yourName"></span></h1>
rybo111

1

आप अपने कोणीय निर्देशों को घेरने के लिए टहनी में एक समारोह बना सकते हैं, इसलिए जाने की बजाय ...

{{"angular"}}

तुम जाओ ...

{{angular_parser("angular stuff here output curlies around it")}}


कृपया अपने उत्तरों में कोड स्निपेट के लिए उपयोगकर्ता कोड ब्लॉक करें।
β.βοιτ.βε
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.