diff options
| author | Igor Minar | 2011-06-06 08:50:35 -0700 | 
|---|---|---|
| committer | Igor Minar | 2011-06-06 22:52:02 -0700 | 
| commit | 7f1e2e48467f80cc083d24b44f088620e4e7bcb6 (patch) | |
| tree | 731a91366c5780985be6d4c5ddbe34e307d5cb70 /docs/content/guide/dev_guide.compiler.widgets.creating_widgets.ngdoc | |
| parent | 5533e48dead5cff3107e72ee80bf0f19df77c1e9 (diff) | |
| download | angular.js-7f1e2e48467f80cc083d24b44f088620e4e7bcb6.tar.bz2 | |
new batch of docs
Diffstat (limited to 'docs/content/guide/dev_guide.compiler.widgets.creating_widgets.ngdoc')
| -rw-r--r-- | docs/content/guide/dev_guide.compiler.widgets.creating_widgets.ngdoc | 116 | 
1 files changed, 116 insertions, 0 deletions
| diff --git a/docs/content/guide/dev_guide.compiler.widgets.creating_widgets.ngdoc b/docs/content/guide/dev_guide.compiler.widgets.creating_widgets.ngdoc new file mode 100644 index 00000000..15ac368c --- /dev/null +++ b/docs/content/guide/dev_guide.compiler.widgets.creating_widgets.ngdoc @@ -0,0 +1,116 @@ +@workInProgress +@ngdoc overview +@name Developer Guide: Angular HTML Compiler: Widgets: Creating Custom Widgets +@description + + +When you create your own widgets, you must set up your own namespace for them.  (See +dev_guide.bootstrap Initializing Angular} for information about namespaces in angular.) + + +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> +// An element widget +<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> + + + + +# Creating a Custom Attribute Widget + + +Let's implement the same widget as in the example in Defining an Element Widget, but this time as +an attribute that can be added to any existing DOM element: + + +<pre> +// An attribute widget (my-watch) in a div tag +<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> + + + + +# Live Example of a Custom Element Widget + + +<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> + + + + +# Additional Compiler Methods for Custom Widgets + + +The angular compiler exposes methods that you may need to use of when writing your own widgets and +directives.  For example, the `descend()` method lets you control whether the compiler ignores or +processes child elements of the element it is compiling.  For information on this and other +compiler methods, see the {@link api/angular.compile Compiler API doc}. + + + + +## Related Topics + + +* {@link dev_guide.compiler Angular HTML Compiler} +* {@link dev_guide.compiler.directives Angular Directives} +* {@link dev_guide.compiler.widgets Angular Widgets} +* {@link dev_guide.compiler.directives.creating_directives Creating Custom Directives} + + +## Related API + + +* {@link api/angular.compile Compiler API} | 
