Конфликт шаблона Golang и AngularJS
У меня конфликт с golang html/template и разделителями angularjs. Я знаю, что есть метод, который позволяет изменить разделитель в Go, но он не работает для меня. Может быть, его нужно вызывать перед разбором файлов? Не могли бы вы привести пример, как это должно быть реализовано.
Я нашел много комментариев о том, что AngularJS и Go не должны конфликтовать, потому что их следует использовать отдельно. Как я понимаю, Go следует использовать только для бэкэнда (REST). Вопрос в том, как AngularJS, HTML должен быть загружен? В этом случае я должен иметь серверы?
7 ответов
Идея AngularJS состоит в том, чтобы весь процесс рендеринга выполнялся на стороне клиента.
Если вы все время придерживаетесь этой логики, вам не требуется никакой визуализации на стороне сервера (например, нет вызова template.Execute
) при обслуживании HTML-файлов AngularJS вам просто нужно предоставить статический контент.
Вам нужно изменить используемые символы разделителей, вот и все. У меня была такая же проблема раньше на Beego из-за точных шаблонных символов {{ }}
и однажды я изменил это на <<<>>>
Мне удалось обслуживать HTML без проблем.
В основном вам нужно вызвать эту функцию, прежде чем выполнять какой-либо анализ: func (t *Template) Delims(left, right string) *Template
Больше подробностей:
Это сработало для меня.
indexTmpl = template.New("index.html").Delims("<<", ">>")
indexTmpl, _ = indexTmpl.ParseFiles("index.html")
Решение, которое не требует смены разделителей:
использование {{"{{"}}
для открытия и {{"}}"}}
для закрытия угловых выражений.
Пример:
{{"{{"}} 1 + 2 {{"}}"}}
Вот полный пример использования HTML-шаблонов Golang + Angular.js путем установки разделителей, как упоминалось другими. Причина этого примера в том, что он демонстрирует сквозной опыт, настройку обслуживания статических ресурсов, разбор шаблонов и, конечно, интеграцию angular.js.
Подобный ответ Bijans, но немного более читаемый. Вы можете использовать "printf" в своем шаблоне для печати строкового литерала. Это работает так же для пакета "html / template".
Например: {{ printf "{{}}"}}
, https://golang.org/pkg/text/template/
Как сказал Ясир, вы должны изменить разделители. Я мартини с разделителями [[и]], и это работает без проблем.