Kod pasajı numaralı yönergede common.script
yönergesini kullanarak dahil edilen FooCtrl
denetleyicisini kullanmaya çalışıyorum.Dahil olan şablonda tanımlanan denetleyiciyi kullanma
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>
Ama bunun yerine konsol angularjs beklenen çıkışı FooCtrl
atar:
Error: [ng:areq] Argument 'FooCtrl' is not a function [...]
Nedenini anlamıyorum! Şablondaki kod istisna atılmadan önce yürütülür, böylece kontrolör tanımlanmalıdır. Bunu nasıl düzeltebilirim?