3

I want to insert HTML coming from a JS function, which is executed when the body is loaded. Initially the body is empty.

This HTML has AngularJS commands, but the problem is that AngularJS doesn't parse the HTML.

<!doctype html>
<html ng-app>
    <head>
        <script>
            function loadHTML(){
                html = '<ul ng-controller="phoneCtrl"><li ng-repeat="phone in phones">{{phone.name}}<p>{{phone.snippet}}</p></li></ul><script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script'+'><script src="controllers.js"></script'+'>';
                document.write = html;
            }
        </script>
    </head>
    <body onload="loadHTML();" ></body>
</html>

The content of controller.js is:

function phoneCtrl($scope) {
    $scope.phones = [
    {
        "name": "Nexus S",
        "snippet": "Fast just got faster with Nexus S."
    },

    {
        "name": "Motorola XOOM™ with Wi-Fi",
        "snippet": "The Next, Next Generation tablet."
    },

    {
        "name": "MOTOROLA XOOM™",
        "snippet": "The Next, Next Generation tablet."
    }
    ];
}
Luis Arriojas
  • 561
  • 3
  • 8
  • 19
  • I believe document.write() actually wipes the whole page, not only the body, so the AngularJS scripts as well. So even if they would process HTML added later on, it wouldn't have a chance to. – 11684 Oct 23 '13 at 15:36

1 Answers1

3

The onload code is executed after AngularJS actually parses the DOM. So to catch them into Angular you have to use $compile. Look in the docs about how $compile works.

Mahbub
  • 3,108
  • 24
  • 29