Hi Sander,
I'm still stuck on this problem..
Do you have advanced resources on Angular $compile and especially and the
use of $transclude in link functions ?
I'm trying to understand $compile in depth but advanced docs are rare and
reading the source code of $compile is kind of hard by moment...
I've read and understood the source code of ng-repeat but i'm still not
confident with the use of $transclude (programmatically).
Thanks a lot,
Charly.
On Tuesday, 1 July 2014 11:48:39 UTC+2, Charly Poly wrote:
>
> Hi guys,
>
> I'm stuck on a design problem while building some directives in a open
> source library.
>
> I'll explain it with abstract name and simplified details to make it more
> readable.
>
> Let say we have 2 directives *A* et *B.*
>
> *The A directive*
>
> *A* only apply on <form> elements and take a attribute *mydirective-b-*
> *instance*.
> *mydirective-b-**object* should be an instance with a method
> *getAttributes()* returning a Array like this : [ "name", "email",
> "phone", ...]
>
> When applied to an element, *A* directive append to the iElement as many
> *B* directive element ( let's say <input *mydirective-a*>) as
> *mydirective-a-instance *length*.*
>
> So :
>
>> // with *myInstance.**getAttributes() => *[ "name", "email", "phone"]
>> <form *mydirective-a **mydirective-a-**instance*
>> *="myInstance">*</form>
>
>
> will a append three <input *mydirective-b*> to the <form> element like
> this :
>
>> <input *mydirective-b="name"*>
>> <input *mydirective-b="email"*>
>> <input *mydirective-b="phone"*>
>
>
> *The B directive*
>
> *B directive *only apply on <input> elements.
> This directive *require a parent A directive* cause *B directive* needs
> *mydirective-b-object
> *instance.
> Why ?
> Cause *B directive transform the iElement *be adding it attributes.
> B directive get attributes to add by calling the inherited instance from
> parent *A directive like this : **myInstance.*
> *getAttributeDefinition(<attributeName>)*
>
> *Example :*
>
> // with
> // with *myInstance.**getAttributes() => *["email"]
> // with *myInstance.**getAttributeDefinition("email") => *{ type :
> "email", "my-another-directive" : "", class : "my-email-class" }
>
> <form *mydirective-a **mydirective-a-**instance*
>> *="myInstance">*<input *mydirective-b="email"*>
>> </form>
>
>
> should end with :
>
> <form *mydirective-a **mydirective-a-**instance*
>> *="myInstance">*<input *type="email"
>> ng-model="myInstance.email" my-another-directive class="my-email-class">*
>
> </form>
>
>
>
> You can see my implementation of this design here :
>
> - A directive :
>
> https://github.com/squareteam/angular-coq/blob/master/lib/directives/coq-model.js
> - B directive :
>
> https://github.com/squareteam/angular-coq/blob/master/lib/directives/coq-model-attribute.js
>
> More explanations one the expected behavior here :
> https://github.com/squareteam/angular-coq/wiki/Coq-Directive
>
> I've found a way to make it work by doing a double
> *$compile(iElement)(scope)* but it cause issues with *ng-click* directives
> that bind 2 times callbacks.
>
>
> If any of you angular experts have a idea, it will be amazing !
>
> Thanks a lot.
>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.