2015-11-25 13 views
0

Мне хотелось узнать, могу ли я автоматизировать итерацию по массиву строк (которые соответствуют именам контроллеров &) для угловых символов с угловым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, не работает? Я изучил их оба, и, насколько я вижу, они абсолютно идентичны.

+0

Я думаю, что это та же самая причина, почему такая функция не может быть минимизирована. Используйте полную нотацию ['$ routeProvider', '$ locationProvider', configFunc] –

+0

попробовал 'app.config (['$ routeProvider', '$ locationProvider', configFunc]);' - к сожалению, не удача - та же проблема – benji7425

ответ

0

Несмотря на то, что я не был успешным, чтобы этот метод работал, я понял, что есть намного лучший способ сделать это, что намного проще!

Вместо того, чтобы строить целую функцию в виде строки и преобразовывать ее в объект функции, объявите функцию как обычно, но включите цикл, который добавляет .when к $ routeProvider каждый раз.

var pages = ["home", "about", "contact"]; 
$locationProvider.html5Mode(true); 
$routeProvider.otherwise({ redirectTo: "/" }); 

for(var i = 0, len = pages.length; i < len; i++){ 
    $routeProvider.when("/" + pages[i], angularAMD.route({ 
     //assign templateUrl, controller, controllerURl etc. here 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^