How should I load mvc partial views and keep Angular JS working. Angular JS is working fine after I render the layout, but if I load partial views in the layout, Angular JS is not working anymore in the partials. I guess that Angular engine is not compiling the ng- directives after I inject the HTML in the DOM.
-
How do you inject the HTML?Maarten Bicknese– Maarten Bicknese2015-05-08 12:17:41 +00:00Commented May 8, 2015 at 12:17
-
@arnolrob The question is similar to stackoverflow.com/questions/18312523/…kanchirk– kanchirk2015-05-08 12:18:15 +00:00Commented May 8, 2015 at 12:18
-
First I was injecting using jQuery $('#id').html(data), then I changed to angular.element('#id').html(data). Also tried to compile var element = angular.element(data); $compile(element)($scope); angular.element("#id").html(element);arnoldrob– arnoldrob2015-05-08 12:34:00 +00:00Commented May 8, 2015 at 12:34
-
@kanchirk Yeap thanks, I already took a look over that post, unfortunately it wasn't helpful in my situationarnoldrob– arnoldrob2015-05-08 13:02:15 +00:00Commented May 8, 2015 at 13:02
2 Answers
Instead of inject your HTML manually. Be it through angular.element.html or $().html. Try using one of the following, angular approved, options:
- A routing engine like ngRoute or ui-router. The engine can include a template which is rendered by the backend.
- The ngInclude directive. This way you can include HTML templates directly.
- Write a custom directive which injects your HTML.
Because these are AngularJS friendly methods, Angular will actually parse the HTML and bind any values within the newly loaded HTML.
8 Comments
From an answer from here
I think you may need to compile HTML string or DOM into a template.
More information, please refer to:
$compile
https://docs.angularjs.org/api/ng/service/$compile
There are some threads that may help you:
AngularJS - Dynamically creating elements that specify directives
AngularJS - Dynamically creating elements that specify directives