Хорошо, думаю, я понял ...
Сначала немного предыстории: причина, по которой мне это было нужно, заключалась в том, чтобы закрепить Angular поверх Node Express и заставить Jade обрабатывать мои частичные файлы за меня.
Итак, вот что нужно сделать ... (сначала выпейте пива и потратите на это 20+ часов !!!) ...
Когда вы настраиваете свой модуль, сохраните $routeProviderглобально:
// app.js:
var routeProvider
, app = angular.module('Isomorph', ['ngResource']).config(function($routeProvider){
routeProvider = $routeProvider;
$routeProvider
.when('/', {templateUrl: '/login', controller: 'AppCtrl'})
.when('/home', {templateUrl: '/', controller: 'AppCtrl'})
.when('/login', {templateUrl: '/login', controller: 'AppCtrl'})
.when('/SAMPLE', {templateUrl: '/SAMPLE', controller: 'SAMPLECtrl'})
.when('/map', {templateUrl: '/map', controller: 'MapCtrl'})
.when('/chat', {templateUrl: '/chat', controller: 'ChatCtrl'})
.when('/blog', {templateUrl: '/blog', controller: 'BlogCtrl'})
.when('/files', {templateUrl: '/files', controller: 'FilesCtrl'})
.when('/tasks', {templateUrl: '/tasks', controller: 'TasksCtrl'})
.when('/tasks/new', {templateUrl: '/tasks/new', controller: 'NewTaskCtrl'})
.when('/tasks/:id', {templateUrl: '/tasks', controller: 'ViewTaskCtrl'})
.when('/tasks/:id/edit', {templateUrl: '/tasks', controller: 'EditTaskCtrl'})
.when('/tasks/:id/delete', {templateUrl: '/tasks', controller: 'DeleteTaskCtrl'})
.otherwise({redirectTo: '/login'});
});
// ctrls.js
...
app.controller('EditTaskCtrl', function($scope, $routeParams, $location, $http){
var idParam = $routeParams.id;
routeProvider.when('/tasks/:id/edit/', {templateUrl: '/tasks/' + idParam + '/edit'});
$location.path('/tasks/' + idParam + '/edit/');
});
...
Это может быть больше информации, чем нужно ...
По сути, вы хотите хранить $routeProvidervar вашего модуля глобально, например, routeProviderчтобы он был доступен вашим контроллерам.
Затем вы можете просто использовать routeProviderи создать НОВЫЙ маршрут (вы не можете 'RESET a route' / 'REpromise'; вы должны создать новый), я просто добавил косую черту (/) в конце, чтобы он был семантическим как первый.
Затем (внутри вашего контроллера) установите templateUrlвид, который вы хотите поразить.
Выньте controllerсвойство .when()объекта, чтобы не получить бесконечный цикл запроса.
И, наконец (все еще внутри контроллера), используйте $location.path()для перенаправления на только что созданный маршрут.
Если вас интересует, как вставить приложение Angular в приложение Express, вы можете разветвить мое репо здесь: https://github.com/cScarlson/isomorph .
И этот метод также позволяет вам сохранить двунаправленные привязки данных AngularJS на случай, если вы хотите привязать свой HTML к своей базе данных с помощью WebSockets: в противном случае без этого метода ваши привязки данных Angular будут просто выводиться {{model.param}}.
Если вы клонируете это сейчас, вам понадобится mongoDB на вашем компьютере для его запуска.
Надеюсь, это решит эту проблему!
Коди
Не пейте воду из ванны.
config()передаются только поставщикам, а не фактическим экземплярам службы, например$routePrams.