好吧,我想我明白了……
先说一点背景知识:我需要这个的原因是将 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/');
});
...
这可能比需要的信息更多......
基本上,您会希望$routeProvider
全局存储模块的 var,例如,routeProvider
以便控制器可以访问它。
然后你可以使用routeProvider
并创建一个新的路由(你不能'RESET a route'/'REpromise';你必须创建一个新的),我只是在末尾添加了一个斜杠(/),以便它具有语义作为第一个。
然后(在您的控制器内),将 设置为templateUrl
您想要点击的视图。
取出对象的controller
属性.when()
,免得出现无限请求循环。
最后(仍在控制器内部),用于$location.path()
重定向到刚刚创建的路由。
如果您对如何将 Angular 应用程序添加到 Express 应用程序感兴趣,可以在此处分叉我的存储库:https ://github.com/cScarlson/isomorph 。
而且这个方法还允许你保留 AngularJS 双向数据绑定,以防你想使用 WebSockets 将你的 HTML 绑定到你的数据库:否则如果没有这个方法,你的 Angular 数据绑定只会输出{{model.param}}
.
如果你在这个时候克隆它,你需要在你的机器上运行 mongoDB 来运行它。
希望这能解决这个问题!
科迪
不要喝你的洗澡水。