Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass HTML to angular directive?

I am trying to create an angular directive with a template, but I also don't want to lose the HTML inside of the div. For example, here is how I would like to call my directive from HTML:

<div my-dir>   <div class="contents-i-want-to-keep"></div> </div> 

Then, there is my directive:

app.directive('myDir', [ '$compile', function($compile) { return {     restrict: 'E',     link: function(scope, iElement, iAttrs){         // assigning things from iAttrs to scope goes here     },     scope: '@',     replace: false,     templateUrl: 'myDir.html' }; }]); 

and then there is myDir.html, where I define a new element:

<div class="example" style="background: blue; height: 30px; width: 30px"></div> 

Even when I set replace to false, I lose the inner contents-i-want-to-keep div - my understanding of the angular docs was that this would be appended after my template. Is there some way to preserve this (possibly through my linking function?) so that the result will be

<div class="example" style="background: blue; height: 30px; width: 30px">      <div class="contents-i-want-to-keep"></div> </div> 

Thanks!

like image 319
Nicole Stein Avatar asked May 22 '13 17:05

Nicole Stein


People also ask

How do you pass data into a directive?

If you want to send data to directive then you should try like this: This is my custom directive, and I am going to share two value from component or HTML to the directive. You will have to use your directive in your html and send data to the directive like in below code. I am sending name and value to the test.

Which directive link AngularJS with HTML?

A - ng-bind directive binds the AngularJS Application data to HTML tags.

How do you use directives in Angular 8?

Angular 8 directives are DOM elements to interact with your application. Generally, directive is a TypeScript function. When this function executes Angular compiler checked it inside DOM element. Angular directives begin with ng- where ng stands for Angular and extends HTML tags with @directive decorator.


1 Answers

You'll need to use ng-transclude, add transclude: true in your directive options, and add ng-transclude to your template:

<div class="example" style="…" ng-transclude></div>` 

This plunkr has an example on how to use ng-transclude with a template, to keep the original dom element.

http://plnkr.co/edit/efyAiTmcKjnhRZMTlNGf

like image 109
Alan Avatar answered Sep 22 '22 23:09

Alan