Okay, denke ich habe es verstanden ...
Wenig Hintergrund zuerst: Der Grund, warum ich das brauchte, war, Angular auf Node Express zu kleben und Jade meine Partials für mich verarbeiten zu lassen.
Also hier ist was du tun musst ... (trinke Bier und verbringe zuerst mehr als 20 Stunden damit !!!) ...
Speichern Sie beim Einrichten Ihres Moduls das $routeProvider
global:
// 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/');
});
...
Das kann mehr Info sein als nötig ...
Grundsätzlich möchten Sie die Variablen Ihres Moduls $routeProvider
global speichern , z. B. routeProvider
damit Ihre Controller darauf zugreifen können.
Dann können Sie einfach routeProvider
eine NEUE Route verwenden und erstellen (Sie können eine Route nicht 'zurücksetzen' / 'Versprechen'; Sie müssen eine neue Route erstellen). Ich habe am Ende nur einen Schrägstrich (/) hinzugefügt, damit sie so semantisch ist Als der erste.
Stellen Sie dann (in Ihrem Controller) templateUrl
die Ansicht ein, die Sie treffen möchten.
Nehmen Sie die controller
Eigenschaft des .when()
Objekts heraus, damit Sie keine unendliche Anforderungsschleife erhalten.
Und schließlich (noch im Controller) verwenden Sie $location.path()
, um zu der gerade erstellten Route umzuleiten.
Wenn Sie daran interessiert sind, eine Angular-App auf eine Express-App zu übertragen, können Sie mein Repo hier aufteilen: https://github.com/cScarlson/isomorph .
Mit dieser Methode können Sie auch die bidirektionalen AngularJS-Datenbindungen beibehalten, falls Sie Ihren HTML-Code mit WebSockets an Ihre Datenbank binden möchten. Andernfalls werden Ihre Angular-Datenbindungen ohne diese Methode nur ausgegeben {{model.param}}
.
Wenn Sie dies zu diesem Zeitpunkt klonen, benötigen Sie mongoDB auf Ihrem Computer, um es auszuführen.
Hoffe das löst dieses Problem!
Cody
Trink dein Badewasser nicht.
config()
nur an Anbieter übergeben werden, werden keine tatsächlichen Dienstinstanzen wie z$routePrams
.