Мне хотелось узнать, могу ли я автоматизировать итерацию по массиву строк (которые соответствуют именам контроллеров &) для угловых символов с угловымAMD конфигурации маршрута. Я решил построить функцию как строку, объединив .when
и т. Д. Для каждого имени/имени контроллера. Затем я использую конструктор javascript Function, чтобы превратить эту строку в функцию, которая может быть передана в app.config
.Конструктор JavaScript-функций для конфигурации маршрута angularjs не работает, но объявление идентичной типизированной функции
Проблема заключается в том, что функция, сгенерированная конструктором Function, вызывает погрешность в погрешности, но если я набираю конфигурацию вручную, это не так.
Итерации набора configFuncString для:
'$locationProvider.html5Mode(true);
$routeProvider.otherwise({
redirectTo : '/'
}).when("/about", angularAMD.route({
templateUrl : "app/components/about/about.html",
controller : "about",
controllerUrl : "../app/components/about/about-controller",
controllerAs : "vm"
})).when("/contact", angularAMD.route({
templateUrl : "app/components/contact/contact.html",
controller : "contact",
controllerUrl : "../app/components/contact/contact-controller",
controllerAs : "vm"
})).when("/home", angularAMD.route({
templateUrl : "app/components/home/home.html",
controller : "home",
controllerUrl : "../app/components/home/home-controller",
controllerAs : "vm"
}));'
Я тогда делать var configFunc = Function("$routeProvider", "$locationProvider", configFuncString);
Если я останов кода в этой точке, и проверить configFunc
это выглядит следующим образом:
(function ($routeProvider, $locationProvider
/**/
) {
$locationProvider.html5Mode(true);
$routeProvider.otherwise({
redirectTo : '/'
}).when("/about", angularAMD.route({
templateUrl : "app/components/about/about.html",
controller : "about",
controllerUrl : "../app/components/about/about-controller",
controllerAs : "vm"
})).when("/contact", angularAMD.route({
templateUrl : "app/components/contact/contact.html",
controller : "contact",
controllerUrl : "../app/components/contact/contact-controller",
controllerAs : "vm"
})).when("/home", angularAMD.route({
templateUrl : "app/components/home/home.html",
controller : "home",
controllerUrl : "../app/components/home/home-controller",
controllerAs : "vm"
}));
})
When Я передаю это в метод конфигурации, app.config(configFunc)
Я получаю ошибку консоли
Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.4.7/$injector/modulerr?p0=app&p1=ReferenceErr…calhost%3A8007%2Fassets%2Flibs%2FangularAMD%2FangularAMD.min.js%3A7%3A3487) angular.js:38
Однако, если я делаю это:
var configFunc = function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.otherwise({ redirectTo: "/" })
.when("/", angularAMD.route({
templateUrl: "app/components/home/home.html",
controller: "home",
controllerUrl: "../app/components/home/home-controller",
controllerAs: "vm"
}))
.when("/about", angularAMD.route({
templateUrl: "app/components/about/about.html",
controller: "about",
controllerUrl: "app/components/about",
controllerAs: "vm"
}))
.when("/contact", angularAMD.route({
templateUrl: "app/components/contact/contact.html",
controller: "contact",
controllerUrl: "app/components/contact",
controllerAs: "vm"
}));
}
А затем передать его в app.config(configFunc)
, она прекрасно работает.
Почему создатель, использующий конструктор Function, не работает? Я изучил их оба, и, насколько я вижу, они абсолютно идентичны.
Я думаю, что это та же самая причина, почему такая функция не может быть минимизирована. Используйте полную нотацию ['$ routeProvider', '$ locationProvider', configFunc] –
попробовал 'app.config (['$ routeProvider', '$ locationProvider', configFunc]);' - к сожалению, не удача - та же проблема – benji7425