Thanks a lot Kevin. It was what I need :-D
Just I've changed where new DOM element is created (It does another library, I can't change this). So I pluked code developed from Kevin's answer: http://plnkr.co/edit/PXOtFzEtghw1JjcH0fe2?p=preview If your see, here I call the 'compile' function by ng-click. This is not good, I've tried to bind with class value (when my body element has a particulary class, angular launch the compile function. But I didn't find how to. Somebody knows? Thanks a lot! El lunes, 11 de mayo de 2015, 18:43:31 (UTC+2), Kevin Shay escribió: > > When adding anything to the DOM that includes bound data, you can use > $compile to get Angular to recognize it. Working version: > > http://plnkr.co/edit/9g50Sf?p=preview > > Cheers, > Kevin > > On Mon, May 11, 2015 at 11:33 AM, Jordi Martínez <[email protected] > <javascript:>> wrote: > >> Sorry, I didn't read I can not add code into the mail :-S >> >> Here (http://plnkr.co/edit/nMtLy782IiML91KtAFER?p=preview) you will find >> the correct way to put code :-) >> >> >> El lunes, 11 de mayo de 2015, 17:29:00 (UTC+2), Jordi Martínez escribió: >>> >>> When I create a new DOM element (out of angular), angular doesn't take >>> it under control. Why? >>> >>> I show you a simplified example : >>> >>> <html ng-app="gemStore"> >>> <head> >>> <script >>> src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> >>> </head> >>> <body ng-controller="StoreController as store"> >>> <button onclick="changeDom();">CreateDomElementWithDataBinding</button> >>> <input type='text' ng-model='store.bright'/> >>> <div id='placeNewElement'> >>> </div> >>> <script type="text/javascript"> >>> angular.module('gemStore',[]).controller('StoreController', >>> function(){ >>> this.name = 'diamont'; >>> this.bright = 3; >>> }); >>> >>> var changeDom = function(){ >>> document.getElementById('placeNewElement').innerHTML = >>> "<input type='text' ng-model='store.name'/>"; >>> }; >>> </script> >>> </body></html> >>> >>> Here, initial DOM is created with an input that have databinding with >>> scope.bright data model. When you click on the button, a new element is >>> created, with ng-model to make a databinding with scope.name. But when >>> new DOM element is created, angular doesn't 'managed' its element (doesn't >>> show scope.name value, doesn't put typical angular classes (ng-valid, >>> etc) to the element). >>> >>> I searched a lot and I can't solve it :-( I tryed to make scope.apply() >>> to upload model, but this appears not to be the problem (because angular >>> doesn't know this new element). >>> >>> I can not change the way that new DOM elements are created (is not my >>> hand to change). But I can execute JS after create new elements. Mey be >>> angular just can 'register data binding' on DOM elements when document >>> loads? >>> >>> Tnaks for help! ;-) >>> >>> Jordi >>> >> -- >> 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] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at http://groups.google.com/group/angular. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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.
