Innym specyficznym dla gałązek rozwiązaniem szaleństwa na wąsy jest użycie verbatimznacznika; np .: {% verbatim %}{{ angular_var }}{% endverbatim %}aby zachować wąsy dla AngularJS: twig.sensiolabs.org/doc/tags/verbatim.html
Darragh Enright
Nie autorowi pytania, ale przyszłym czytelnikom: jeśli szukasz odpowiedzi na to pytanie, rozważ w ogóle uniknięcie renderowania szablonów po stronie serwera, jeśli możesz sobie na to pozwolić (jeśli główna treść znajduje się w strefie uwierzytelnionej lub w głównej wyszukiwarce ponieważ źródłem ruchu jest Google (mogą parsować JS SPA)).
OZ_
1
@OZ_ Argument wyszukiwarki przeciwko AngularJS i tym podobnym staje się dość redundantny podczas korzystania z usług takich jak prerender.io .
E. Sundin
Odpowiedzi:
287
Możesz zmienić znaczniki interpolacji początkowej i końcowej za pomocą interpolateProviderusługi. Jednym dogodnym miejscem do tego jest czas inicjalizacji modułu.
Nie użyłbym jednak [[]]. Może być źle w niektórych wiązaniach, takich jak ten:[[myObject[myArray[index]]
Andrew Joslin
1
Prawdziwe. Używam {[{}]}z Django, chociaż trochę dziwne jest pisanie. Zaktualizowałem odpowiedź.
abhaga,
4
Dzięki! Wystąpił podobny problem z Jeykll / Liquid i Angular JS. Wybrałem {[i]}.
jfroom
7
Czy średnik nie musi być usunięty po} w wierszu 3?
CashIsClay
Czy można to zrobić na poziomie globalnym w Angular? Nasza strona internetowa będzie zawierała wiele modułów na wielu różnych stronach i nie chcemy tego zapominać.
the4Kman
89
To pytanie wydaje się być odpowiedzią, ale bardziej eleganckim rozwiązaniem, o którym nie wspomniano, jest po prostu zamknięcie nawiasów klamrowych w cudzysłów między gałązkami nawiasów klamrowych, tak:
{{'{{myModelName}}'}}
Jeśli używasz zmiennej dla zawartości, zrób to zamiast tego:
{{'{{'~ yourvariable ~'}}'}}
Powinieneś używać pojedynczych cudzysłowów , a nie podwójnych. Podwójne cudzysłowy umożliwiają interpolację ciągów przez Twiga, więc musisz być bardziej ostrożny z zawartością, szczególnie jeśli używasz wyrażeń.
Jeśli nadal nie lubisz oglądać tych nawiasów klamrowych, możesz również utworzyć proste makro w celu zautomatyzowania procesu:
Zapisz go jako plik i zaimportuj do swojego szablonu. Używam ngnazwy, ponieważ jest krótka i słodka.
{%import"forms.html"as ng %}
Możesz też umieścić makro na górze szablonu i zaimportować je jako _self (patrz tutaj) :
{%import _self as ng %}
Następnie użyj go w następujący sposób:
{{ ng.curly('myModelName')}}
To daje:
{{myModelName}}
... i kontynuacja dla tych, którzy używają MtHaml obok Twig. MtHaml umożliwia korzystanie z loków AngularJS w normalny sposób, ponieważ każdy kod Twig jest dostępny - i = zamiast {{}}. Na przykład:
Zwykły HTML + AngularJS:
<trng-repeat="product in products"><td> {{ product.name }} </td></tr>
MtHaml + AngularJS:
%tr(ng-repeat="product in products")%td {{ product.name }}
MtHaml + AngularJS z gałązką w stylu MtHaml:
-set twigVariable ="somevalue"= twigVariable
%tr(ng-repeat="product in products")%td {{ product.name }}
Może nie jest to najprzyjemniejszy sposób, ale moim zdaniem jest to jedyny sposób, aby nie martwić się o problem ze zgodnością. Ether modyfikacja Angular lub Twig {{może spowodować problem ze zgodnością lub złą przenośnością.
Jak wspomniano w podobnym pytaniu o Django i AngularJS, sztuczka polegająca na zmianie domyślnych symboli (w Twig lub AngularJS) może zapewnić niezgodność z oprogramowaniem innych firm, które będą używać tych symboli. Więc najlepsza rada, którą znalazłem w Google: https://groups.google.com/d/msg/symfony2/kyebufz4M00/8VhF1KWsSAEJ
TwigBundle nie zapewnia konfiguracji ograniczników leksykalnych, ponieważ ich zmiana zabraniałaby używania szablonów udostępnianych przez wspólne pakiety (w tym szablonów wyjątków udostępnianych przez samą TwigBundle).
Możesz jednak użyć surowego znacznika wokół kątowych szablonów, aby uniknąć bólu ucieczki od wszystkich nawiasów klamrowych:
http://twig.sensiolabs.org/doc/tags/raw.html
- Christophe | Stof
Ach, to było dla mnie ratowanie życia. Nie mogłem użyć {{param}} w filtrze: {{{{param}}: $ select.search} i twoje rozwiązanie to naprawiło. Dzięki
balron
19
Jeśli nie jesteś zainteresowany zmianą znaczników szablonu istniejącej składni kątowej, co wymagałoby nieco mylącego przepisywania istniejących szablonów kątowych.
Można po prostu użyć tagów szablonów gałązek z tagami kątowymi:
gdzie powinienem umieścić te kody? | O! Rozumiem, muszę zrobić ng-app = app
zx1986
Zaczynając od AngularJS i w Laravel 4 załadowałem framework, a następnie dodałem {{2 + 2}} do widoku - nic więcej i uzyskałem ocenę 4. Gdzie umieścić kod, aby zmienić to na [[2+ 2]]? Próbowałem dodać go między znacznikami skryptu na tej samej stronie i dodać ng-app = "myApp" do zawierającego znacznik div, ale to nie działa.
Słowo ostrzeżenia, użyłem podwójnych nawiasów kwadratowych dla Angulara, ale właśnie napotkałem problem z frameworkiem Django Message. Wiadomości tworzą plik cookie, który zawiera [[]], a Angular próbuje go parsować i dusi się w tym procesie. Próbowałem przejść do przechowywania sesji dla wiadomości, ale ten sam problem. Zmieniłem na potrójne nawiasy kwadratowe.
Dustin,
2
Lubię @pabloRN, ale wolałbym używać span zamiast p, ponieważ dla mnie p doda linię do wyniku.
Użyję tego:
<spanng-bind="yourName"></span>
Używam również aText z kursorem wewnątrz podwójnego cudzysłowu, więc nie muszę ciągle przepisywać całego tekstu.
tak naprawdę to ng-bind = "" ma znaczenie, możesz użyć dowolnego tagu, który ci się podoba :)
wesamly
@wesamly Możesz użyć dowolnego tagu, ale <span>jest on używany w tekście wstawionym, gdy masz inną treść. Na przykład:<h1>Welcome <span ng-bind="yourName"></span></h1>
rybo111,
1
Możesz utworzyć funkcję w gałązce, aby otaczać swoje dyrektywy kątowe, tak jak zamiast iść ...
{{"angular"}}
ty idź ...
{{angular_parser("angular stuff here output curlies around it")}}
verbatim
znacznika; np .:{% verbatim %}{{ angular_var }}{% endverbatim %}
aby zachować wąsy dla AngularJS: twig.sensiolabs.org/doc/tags/verbatim.htmlOdpowiedzi:
Możesz zmienić znaczniki interpolacji początkowej i końcowej za pomocą
interpolateProvider
usługi. Jednym dogodnym miejscem do tego jest czas inicjalizacji modułu.https://docs.angularjs.org/api/ng/provider/$interpolateProvider
źródło
[[myObject[myArray[index]]
{[{}]}
z Django, chociaż trochę dziwne jest pisanie. Zaktualizowałem odpowiedź.To pytanie wydaje się być odpowiedzią, ale bardziej eleganckim rozwiązaniem, o którym nie wspomniano, jest po prostu zamknięcie nawiasów klamrowych w cudzysłów między gałązkami nawiasów klamrowych, tak:
Jeśli używasz zmiennej dla zawartości, zrób to zamiast tego:
Powinieneś używać pojedynczych cudzysłowów , a nie podwójnych. Podwójne cudzysłowy umożliwiają interpolację ciągów przez Twiga, więc musisz być bardziej ostrożny z zawartością, szczególnie jeśli używasz wyrażeń.
Jeśli nadal nie lubisz oglądać tych nawiasów klamrowych, możesz również utworzyć proste makro w celu zautomatyzowania procesu:
Zapisz go jako plik i zaimportuj do swojego szablonu. Używam
ng
nazwy, ponieważ jest krótka i słodka.Możesz też umieścić makro na górze szablonu i zaimportować je jako _self (patrz tutaj) :
Następnie użyj go w następujący sposób:
To daje:
... i kontynuacja dla tych, którzy używają MtHaml obok Twig. MtHaml umożliwia korzystanie z loków AngularJS w normalny sposób, ponieważ każdy kod Twig jest dostępny - i = zamiast {{}}. Na przykład:
Zwykły HTML + AngularJS:
MtHaml + AngularJS:
MtHaml + AngularJS z gałązką w stylu MtHaml:
źródło
{{'{{contact.name}\}'}}
co drukuje{{contact.name}}
tak, jak chciałemJak wspomniano w podobnym pytaniu o Django i AngularJS, sztuczka polegająca na zmianie domyślnych symboli (w Twig lub AngularJS) może zapewnić niezgodność z oprogramowaniem innych firm, które będą używać tych symboli. Więc najlepsza rada, którą znalazłem w Google: https://groups.google.com/d/msg/symfony2/kyebufz4M00/8VhF1KWsSAEJ
Tag został przemianowany na dosłownie
źródło
Możesz także użyć dyrektywy opartej na atrybutach
<p ng-bind="yourText"></p>
jest taka sama jak<p>{{yourText}}</p>
źródło
<li id={{item.id}}></li>
?<p data-ng-bind="yourText"></p>
aby HTML był poprawnyMożesz użyć tego,
\{{product.name}}
aby wyrażenie zostało zignorowane przez Kierownicę i zamiast tego użyte przez Angular.źródło
To jest skompilowana wersja najlepszych odpowiedzi i przykład bloków dosłownie:
W przypadku pojedynczych wstawek użyj:
lub jeśli używasz zmiennej gałązkowej
Verbatim , jest bardzo elegancki i czytelny dla kilku zmiennych kątowych:
źródło
Jeśli nie jesteś zainteresowany zmianą znaczników szablonu istniejącej składni kątowej, co wymagałoby nieco mylącego przepisywania istniejących szablonów kątowych.
Można po prostu użyć tagów szablonów gałązek z tagami kątowymi:
Znalazłem to na innym podobnym wątku odpowiedź : angularjs na zastosowaniu Symfony2
źródło
Alternatywnie możesz zmienić postacie używane przez Twiga. Jest to kontrolowane przez Twig_Lexer .
źródło
Zgodnie z tym postem powinieneś być w stanie to zrobić w następujący sposób:
źródło
Lubię @pabloRN, ale wolałbym używać span zamiast p, ponieważ dla mnie p doda linię do wyniku.
Użyję tego:
Używam również aText z kursorem wewnątrz podwójnego cudzysłowu, więc nie muszę ciągle przepisywać całego tekstu.
źródło
<span>
jest on używany w tekście wstawionym, gdy masz inną treść. Na przykład:<h1>Welcome <span ng-bind="yourName"></span></h1>
Możesz utworzyć funkcję w gałązce, aby otaczać swoje dyrektywy kątowe, tak jak zamiast iść ...
{{"angular"}}
ty idź ...
{{angular_parser("angular stuff here output curlies around it")}}
źródło