mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
78 lines
2 KiB
Text
78 lines
2 KiB
Text
@workInProgress
|
|
@ngdoc overview
|
|
@name angular.widget
|
|
@namespace Namespace for all widgets.
|
|
@description
|
|
# Overview
|
|
Widgets allow you to create DOM elements that the browser doesn't
|
|
already understand. You create the widget in your namespace and
|
|
assign it behavior. You can only bind one widget per DOM element
|
|
(unlike directives, in which you can use any number per DOM
|
|
element). Widgets are expected to manipulate the DOM tree by
|
|
adding new elements whereas directives are expected to only modify
|
|
element properties.
|
|
|
|
Widgets come in two flavors: element and attribute.
|
|
|
|
# Element Widget
|
|
Let's say we would like to create a new element type in the
|
|
namespace `my` that can watch an expression and alert() the user
|
|
with each new value.
|
|
|
|
<pre>
|
|
<my:watch exp="name"/>
|
|
</pre>
|
|
|
|
You can implement `my:watch` like this:
|
|
<pre>
|
|
angular.widget('my:watch', function(compileElement) {
|
|
var compiler = this;
|
|
var exp = compileElement.attr('exp');
|
|
return function(linkElement) {
|
|
var currentScope = this;
|
|
currentScope.$watch(exp, function(value){
|
|
alert(value);
|
|
});
|
|
};
|
|
});
|
|
</pre>
|
|
|
|
# Attribute Widget
|
|
Let's implement the same widget, but this time as an attribute
|
|
that can be added to any existing DOM element.
|
|
<pre>
|
|
<div my:watch="name">text</div>
|
|
</pre>
|
|
You can implement `my:watch` attribute like this:
|
|
<pre>
|
|
angular.widget('@my:watch', function(expression, compileElement) {
|
|
var compiler = this;
|
|
return function(linkElement) {
|
|
var currentScope = this;
|
|
currentScope.$watch(expression, function(value){
|
|
alert(value);
|
|
});
|
|
};
|
|
});
|
|
</pre>
|
|
|
|
@example
|
|
<doc:example>
|
|
<doc:source>
|
|
<script>
|
|
angular.widget('my:time', function(compileElement){
|
|
compileElement.css('display', 'block');
|
|
return function(linkElement){
|
|
function update(){
|
|
linkElement.text('Current time is: ' + new Date());
|
|
setTimeout(update, 1000);
|
|
}
|
|
update();
|
|
};
|
|
});
|
|
</script>
|
|
<my:time></my:time>
|
|
</doc:source>
|
|
<doc:scenario>
|
|
</doc:scenario>
|
|
</doc:example>
|