Im Code-Snippet versuche ich einen Controller FooCtrl
zu verwenden, der in der mitgelieferten Vorlage app/foo.html
definiert ist, indem die Direktive common.script
verwendet wird.Verwendung des in der mitgelieferten Vorlage definierten Controllers
angular.module('common.script', []).directive('script', function() {
return {
restrict: 'E',
scope: false,
compile: function(element, attributes) {
if (attributes.script === 'lazy') {
var code = element.text()
new Function(code)()
}
}
}
})
angular.module('app.templates', ['app/foo.html'])
angular.module("app/foo.html", []).run(function($templateCache) {
$templateCache.put("app/foo.html",
"<script data-script=\"lazy\">\n" +
" console.log('Before FooCtrl')\n" +
" \t angular.module('app').controller('FooCtrl', function($scope) {\n" +
" \t \t console.log('FooCtrl')\n" +
" \t })\n" +
"<\/script>\n" +
"<div data-ng-controller=\"FooCtrl\">app\/foo.html\n" +
"<\/div>"
)
})
angular.module('app', ['common.script', 'app.templates']).controller('ApplicationCtrl', function($scope) {
console.log('ApplicationCtrl')
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
<div data-ng-app="app" data-ng-controller="ApplicationCtrl">
<div data-ng-include="'app/foo.html'"></div>
</div>
Aber statt der erwarteten Ausgang FooCtrl
in der Konsole AngularJS wirft:
Error: [ng:areq] Argument 'FooCtrl' is not a function [...]
Ich verstehe nicht, warum! Der Code in der Vorlage wird ausgeführt, bevor die Ausnahme ausgelöst wird. Daher sollte der Controller definiert werden. Wie könnte ich das beheben?