【发布时间】:2016-08-17 12:39:01
【问题描述】:
我有一个 MEAN Stack 应用程序,它以前是基于服务器的应用程序,现在我正在尝试将其转换为单页应用程序。
我目前的结构:
- 我有一个加载主视图的 index.ejs 文件,它包含
ng-view标签。 - index.ejs 文件有一个包含 5 个项目的菜单。每个项目在 ng-view 中加载一个新视图。
- 每个菜单项都会加载一个新视图,并且每个菜单项都有自己的控制器。
我的问题:
目前我所有的功能都在一个控制器下,所以当我使用 ngRoute 时,它看起来像这样:
myCtrl.config(function($routeProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: '/test.ejs',
controller: 'myCtrl1',
})
// route for the about page
.when('/proposals', {
templateUrl: '/profile.ejs',
controller: 'myCtrl1'
})
// route for the contact page
.when('/bios', {
templateUrl : '/test2.ejs',
controller : 'myCtrl1'
});
});
这导致我的控制器文件包含大量代码。我想根据它们的特征来划分它们。所以每个视图都应该有自己的控制器。
我的问题:
- 对于此类场景,正确的应用结构是什么。
-
我怎样才能像这样将外部控制器放入 ngRoute:
myApp.controller('myCtrl1',function($scope){}); .when('/', { templateUrl: '/test.ejs', controller: 'myCtrl1', // INTERNAL CONTROLLER }) .when('/proposals', { templateUrl: '/profile.ejs', controller: '/directory2/js/myCtrl2' //EXTERNAL CONTROLLER })
我不确定这里的正确方法是什么。我想让我的应用模块化并实现关注点分离。
【问题讨论】:
-
我认为你应该有一个最抽象的
MainCtrl,它定义在div包装你的ng-view或body标签上,每个视图都有自己独立的控制器. -
@notgiorgi 你能举个例子吗?
-
好的,我会发布它作为答案。
-
你检查过 mean.js 或 mean.io 框架
标签: javascript angularjs controller single-page-application mean-stack