angularjsxhtmlxml-namespacesbackwards-compatibilityng-app

Angular in an XML Namespace does not auto bootstrap via ng:app


I know that due to backwards compatibility with IE, Angular allows the use of an xmlns and using ng: instead of ng-, however it doesn't appear to be working with all directives in xhtml

<?xml version="1.0"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ng="http://angularjs.org">
  <head>
    <title>Test</title>
  </head>
  <body ng:app="MyApp">
    <div ng:controller="FooController as foo">
      <p>{{foo.text}}</p>
    </div>
    <script src="angular.min.js" />
    <script>
      var app = angular.module("MyApp", []);
      app.controller("FooController", function () {
        this.text = "Hello Angular!";
      });
    </script>
  </body>
</html>

The above will just produce {{foo.text}}, but if I replace ng:app with ng-app (leaving ng:controller the way it is) everything works fine. I really like the consistency of using namespaces, so why doesn't ng:app work?


Solution

  • The ng:app syntax doesn't work due to the following:

    The elements contained within the template are always created in the HTML namespace. Whilst this is probably fine for the fast majority of cases if someone ever uses AngularJS with another XML document like SVG this could cause some problems.

    References