Я хочу добавить скрипт динамического контроллера, когда контроллер загружается через представление.
Вот мои файлы дерева:
- index.html
- app.js
- просмотров
- prod.html
- cat.html
- prod.html
- контроллеры
- prod.js
- cat.js
Я хочу, чтобы, когда пользователь получить /prod/
URL приложение будет загружать (в его) prod.html и prod.js
для логики контроллера динамически.
Вся эта логика, конечно, требовала ng-маршрута.
Index.html
<body data-ng-app="myApp">
<div data-ng-view=""></div>
</body>
Default.js с использованием AngularJS v1.3.14
var app = angular.module('myApp', ['ngRoute']);
app.config(function ($routeProvider, $locationProvider, $controllerProvider, $provide) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
app.registerCtrl = $controllerProvider.register;
$routeProvider.
when('/:name', {
templateUrl: function (urlAttr) {
return '/views/' + urlAttr.name + '.html';
}
});
// This code throw error:
//TypeError: undefined is not a function
//at angular.min.js:1
//at r (angular.min.js:1)
//at at (angular.min.js:1)
//at b (angular.min.js:1)
//at b (angular.min.js:1)
//at b (angular.min.js:1)
//at b (angular.min.js:1)
//at $get.t (angular.min.js:1)
//at angular.min.js:1
//at p.$get.p.$eval (angular.min.js:1)
$provide.decorator('$controller', ['$delegate', function ($delegate) {
// I want to get the controller name and than load the js file.
// return function (constructor, locals) {
// if (typeof constructor == "string") {
// locals.$scope.loadControllerScript(constructor);
// }
// return $delegate(constructor, locals);
// }
}]);
});
Prod.html
<div class="row" data-ng-controller="prodCtrl">
{{test}}
</div>
Prod.js
app.registerCtrl('prodCtrl', function ($scope) {
$scope.test = '';
});
Проблема заключается ошибка: "неопределенные не является функцией". (См. Код в Default.js)
Если вопрос непонятен, я буду рад объяснить больше.
Можете ли вы показать код, в котором вы предоставляете функцию loadControllerScript? – preslavrachev
Это не имеет значения. Исключение выбрано в «$.decorator ('$ controller', ['$ delegate', function ($ delegate) {" - до "loadControllerScript". Я обновлю свой вопрос. –