AngularJS (Restangular CRUD , Simplify / DRY Contr

2019-06-07 20:24发布

问题:

Below a small example of what I want to simplify. I have the same structure set up for a few other models, and was wondering if I could prevent typing out the same functionality but with just different messages/model.

Is it possible to reuse a controller & pass parameters? (In this case, the name of the model + the messages that need to be shown...). Ideally, I just want the basic CRUD controller to be reused, but allow custom methods, just in case.

angular.module('employees.controllers', ["templates.app", "ui.bootstrap"])
.controller("EmployeeListController", ["$scope", "$modal", "Restangular", function ($scope, $modal, Restangular) {
    var Employee = Restangular.all("employees");

    Employee.getList().then(function (employees) {
        $scope.employees = employees;
    })

    $scope.createEmployee = function () {
        $modal.open({
            templateUrl: 'employees/partials/employees.manage.modal.tpl.html',
            controller: 'EmployeeCreateController'
        }).result.then(function (employee) {
                Employee.post(employee).then(function (newEmployee) {
                    $scope.messageService.addMessage("success", "Employee was successfully created!");
                    $scope.employees.push(newEmployee);
                });
            });
    };

    $scope.deleteEmployee = function (employee) {
        employee.remove().then(function () {
            $scope.messageService.addMessage("success", "Employee was successfully deleted!");
            $scope.employees = _.without($scope.employees, employee);
        });
    };

    $scope.editEmployee = function (originalEmployee) {
        $modal.open({
            templateUrl: 'employees/partials/employees.manage.modal.tpl.html',
            controller: 'EmployeeUpdateController',
            resolve: {
                employee: function () {
                    return Restangular.copy(originalEmployee);
                }
            }
        }).result.then(function (employee) {
                employee.put().then(function (updated_employee) {
                    $scope.messageService.addMessage("success", "Employee was successfully updated!");
                    var originalIndex = _.indexOf($scope.employees, originalEmployee);
                    $scope.employees[originalIndex] = updated_employee;
                });
            });
    };
}]).controller("EmployeeCreateController", ["$scope", "$modalInstance", "$timeout", function ($scope, $modalInstance, $timeout) {
    $scope.createMode = true;

    $scope.form = {};
    $scope.employee = {};
    $scope.datepicker = {};

    $scope.ok = function () {
        if ($scope.form.createResource.$valid) {
            $modalInstance.close($scope.employee);
        }
    };

    $scope.open = function () {
        $timeout(function () {
            $scope.datepicker.opened = true;
        });
    };
    $scope.cancel = function () {
        $modalInstance.dismiss("cancel");
    };
}]).controller("EmployeeUpdateController", ["$scope", "$modalInstance", "employee", function ($scope, $modalInstance, employee) {
    $scope.createMode = false;
    $scope.form = {};
    $scope.employee = employee;

    $scope.ok = function () {
        if ($scope.form.createResource.$valid) {
            $modalInstance.close($scope.employee);
        }
    };

    $scope.cancel = function () {
        $modalInstance.dismiss("cancel");
    };
}]);