如何在CRUD配置中合并angularjs模板和控制器

时间:2016-08-06 21:59:48

标签: angularjs

我有一个网络应用程序,可以在后端到angularjs前端的几个桌面上提供restful api。

api只是CRUD功能。到目前为止,我对三个表有相同的操作。它们是:列表,显示细节,新箱子和编辑。

以角度实现很简单,我需要做的就是为每个动作创建一个控制器和一个视图模板。

然而,问题是每个表,我必须复制几乎相同的控制器和视图模板。它们在业务逻辑上是相同的,但对象名称不同,并且表中有一些独特的功能。

是否有办法整合控制器和html模板,同时仍然能够将某些特定功能插入控制器,具体取决于它控制的表/动作?

修改

例如两个表:学校和学生。他们都有财产nameaddress。学生有一个特殊功能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}。控制器。

对于html模板

学校和学生都共享相同格式的模板(或者至少是视图的一大块)。例如。列表视图,它们都是一个表,名称和地址作为列。单击列的行将显示详细信息视图。

同样,我需要为学校和学生创建两套相同的模板文件,但有一些区别。

那么在控制器和模板中整合复制的最佳方法是什么?

0 个答案:

没有答案