我有一个网络应用程序,可以在后端到angularjs前端的几个桌面上提供restful api。
api只是CRUD功能。到目前为止,我对三个表有相同的操作。它们是:列表,显示细节,新箱子和编辑。
以角度实现很简单,我需要做的就是为每个动作创建一个控制器和一个视图模板。
然而,问题是每个表,我必须复制几乎相同的控制器和视图模板。它们在业务逻辑上是相同的,但对象名称不同,并且表中有一些独特的功能。
是否有办法整合控制器和html模板,同时仍然能够将某些特定功能插入控制器,具体取决于它控制的表/动作?
例如两个表:学校和学生。他们都有财产name
和address
。学生有一个特殊功能graduate
。
对于学校,我可以拥有这样的控制器js文件(示例代码不会运行):
angular.module('school', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/schools', {
controller:'SchoolListController as ctrl',
templateUrl:'school/schoollist.html'
})
.when('/schools/:id', {
controller:'SchoolDetailController as ctrl',
templateUrl:'school/schooldetail.html'
})
.when('/schools/edit/:id', {
controller: 'SchoolEditController as ctrl',
templateUrl: 'school/schooledit.html'
})
}])
.controller('SchoolListController', function($scope,$location, Models) {
var ctrl = this
var schools = Models.School.query(function () {
ctrl.schools = schools
})
})
.controller('SchoolDetailController', function($scope, $routeParams, $location, Models) {
var ctrl = this
var school = Models.School.get({ id: $routeParams.id }, function () {
ctrl.school = school
})
ctrl.delete = function(){
// code to delte
}
})
.controller('SchoolEditController', function(Models, $routeParams, $location) {
var ctrl = this;
var school = Models.School.get({id: $routeParams.id}, function(){
ctrl.school = school
})
ctrl.save = function(){
ctrl.school.$save()
}
ctrl.cancel = function() {
//
}
})

对于学生,需要再次编写完全相同的js文件,但只需将名称从school
更改为student
,但我需要在学生中添加ctrl.graduate
&# 39; s细节控制器。
我可以创建一个生成函数generateController(objName)
来根据提供的objName
生成控制器,但是,我不能稍后添加graduate
给学生&#39}。控制器。
学校和学生都共享相同格式的模板(或者至少是视图的一大块)。例如。列表视图,它们都是一个表,名称和地址作为列。单击列的行将显示详细信息视图。
同样,我需要为学校和学生创建两套相同的模板文件,但有一些区别。
那么在控制器和模板中整合复制的最佳方法是什么?