Você pode usar angular.bootstrap()diretamente ... o problema é que você perde os benefícios das diretivas.
Primeiro, você precisa obter uma referência ao elemento HTML para inicializá-lo, o que significa que seu código agora está acoplado ao seu HTML.
Em segundo lugar, a associação entre os dois não é tão aparente. Com ngAppvocê, você pode ver claramente qual HTML está associado a qual módulo e você sabe onde procurar essas informações. Mas angular.bootstrap()pode ser invocado de qualquer lugar no seu código.
Se você for fazer da melhor maneira possível, use uma diretiva. Foi o que eu fiz. É chamado ngModule. Aqui está a aparência do seu código usando-o:
<!DOCTYPE html>
<html>
<head>
<script src="angular.js"></script>
<script src="angular.ng-modules.js"></script>
<script>
var moduleA = angular.module("MyModuleA", []);
moduleA.controller("MyControllerA", function($scope) {
$scope.name = "Bob A";
});
var moduleB = angular.module("MyModuleB", []);
moduleB.controller("MyControllerB", function($scope) {
$scope.name = "Steve B";
});
</script>
</head>
<body>
<div ng-modules="MyModuleA, MyModuleB">
<h1>Module A, B</h1>
<div ng-controller="MyControllerA">
{{name}}
</div>
<div ng-controller="MyControllerB">
{{name}}
</div>
</div>
<div ng-module="MyModuleB">
<h1>Just Module B</h1>
<div ng-controller="MyControllerB">
{{name}}
</div>
</div>
</body>
</html>
Você pode obter o código fonte para isso em:
http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/
É implementado da mesma maneira que ngApp. Simplesmente chama angular.bootstrap()nos bastidores.