Как настроен этот пользовательский тег?
Я использую эту библиотеку https://github.com/tchatel/angular-treeRepeat
Таким образом, для создания списка узлов используется следующий синтаксис:
<li frang-tree-repeat="node in treeData>
frang-tree-repeat
такое пользовательский тег, и поэтому он должен быть настроен где-то в библиотеке?
В поиске источника https://github.com/tchatel/angular-treeRepeat я не вижу ссылок на frang-tree-repeat, так как настроен этот тег или, другими словами, как интерпретируется frang-tree-repeat?
2 ответа
Angular нормализует имена директив (как атрибутов, так и тегов) от kebab-case до camelCase. Это необходимо, так как имена тегов и атрибутов HTML лучше пишутся в kebab-case (поскольку имена не чувствительны к регистру в HTML), в то время как в Javascript имена kebab-case не будут допустимыми идентификаторами и не могут использоваться для имен директив (ну, они могли бы, но это потребовало бы дополнительной упаковки в кавычки).
Вот почему вы должны предварительно нормализовать HTML-нотацию до JS. Angular имеет сервис $normalize, который используется для этого. Так что это означает, что если в HTML у вас есть frang-tree-repeat
оно будет переведено на frangTreeRepeat
в JavaScript
В вашем случае ваша директива находится здесь: https://github.com/tchatel/angular-treeRepeat/blob/master/app/js/directives.js#L18
frang-tree-repeat
является пользовательской директивой, которая определена в модуле app.directives
в angular-treeRepeat. Как отметил @dfsq, его реализацию можно найти здесь.
Обратите внимание, что это требует frangtree
в своем определении require: ^frangTree
:
Когда директива использует эту опцию,
$compile
выдаст ошибку, если указанный контроллер не найден.^
префикс означает, что эта директива ищет контроллер у его родителей (без^
префикс, директива будет искать контроллер только по своему элементу).