mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 15:40:22 +00:00
67 lines
1.9 KiB
Text
67 lines
1.9 KiB
Text
|
|
@workInProgress
|
||
|
|
@ngdoc overview
|
||
|
|
@name angular.markup
|
||
|
|
|
||
|
|
@description
|
||
|
|
#Overview
|
||
|
|
Markups allow the angular compiler to transform content of DOM elements or portions of this content
|
||
|
|
into other text or DOM elements for further compilation. Markup extensions do not themselves produce
|
||
|
|
linking functions. Think of markup as a way to produce shorthand for a {@link angular.widget widget}
|
||
|
|
or a {@link angular.directive directive}.
|
||
|
|
|
||
|
|
#`{{}}` (double curly) built-in markup
|
||
|
|
`{{}}` markup is a built-in markup, which translates the enclosed expression into an
|
||
|
|
{@link angular.directive.ng:bind ng:bind} directive. It simply transforms
|
||
|
|
|
||
|
|
<pre>
|
||
|
|
{{expression}}
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
to:
|
||
|
|
|
||
|
|
<pre>
|
||
|
|
<span ng:bind="expression"></span>
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
For example `{{1+2}}` is easier to write and understand than `<span ng:bind="1+2"></span>`. The
|
||
|
|
expanded elements are then {@link guide.compiler compiled} normally.
|
||
|
|
|
||
|
|
# Custom markup
|
||
|
|
Let's say you want to define this shorthand for a horizontal rule: `---` for `<hr/>`.
|
||
|
|
|
||
|
|
In other words, this HTML:
|
||
|
|
<pre>
|
||
|
|
header
|
||
|
|
---
|
||
|
|
footer
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
should translate to:
|
||
|
|
<pre>
|
||
|
|
header
|
||
|
|
<hr/>
|
||
|
|
footer
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
Here's how the angular compiler could be extended to achieve this:
|
||
|
|
<pre>
|
||
|
|
angular.markup('---', function(text, textNode, parentElement) {
|
||
|
|
var compiler = this;
|
||
|
|
var index = text.indexOf('---');
|
||
|
|
if (index > -1) {
|
||
|
|
var before = compiler.text(text.substring(0, index));
|
||
|
|
var hr = compiler.element('hr');
|
||
|
|
var after = compiler.text(text.substring(index + 3));
|
||
|
|
textNode.after(after);
|
||
|
|
textNode.after(hr);
|
||
|
|
textNode.after(before);
|
||
|
|
textNode.remove();
|
||
|
|
}
|
||
|
|
});
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
Unlike {@link angular.widget widgets} and {@link angular.directive directives}, in which the
|
||
|
|
compiler matches the name of handler function to a DOM element or attribute name, for markup the
|
||
|
|
compiler calls every markup handler for every text node, giving the handler a chance to transform
|
||
|
|
the text. The markup handler needs to find all the matches in the text.
|