Estoy usando AngularJS y tengo un HTML con un formulario y un Controller asociado. También tengo una clase de entidad de Employee , una clase de Departmen , etc. Así que desde el HTML tengo este tipo de líneas para un formulario para agregar un nuevo empleado al sistema:
<div class="col-sm-6"> <div class="form-group"> <label>Employee department</label> <select class="selectpicker" ng-model="NewEmployeeController.employee.name"> <option ng-repeat="department in NewEmployeeController.departments" ng-value="department.getName()">{{department.getName()}}</option> <option style="display:none" value=""></option> </select> </div> </div>En el controlador AngularJS tengo esto:
var employeeModule= angular.module('employeeModule'); employeeModule.controller ("NewEmployeeController",function(){ var self = this; self.employee = { name : null, department : {name : null, ...}, ...}; .... });Pero sé que puedo usar la clase de entidad Empleado y tener esta línea en el controlador:
.... self.employee = new Employee(); ....en cambio esta línea:
.... self.employee = { name : null, department : {name : null, ...}, ...}; // or just self.employee; but I like to see in the controller all the attributes referenced by the html ....Ambos caminos funcionan. La razón por la que tengo una clase de entidad es en el lado del cliente. Puedo tener objetos cohesivos con responsabilidad y no solo estructuras de datos. Pero no me gusta tener el html para vincular y manipular la entidad directamente (porque no quiero que mis entidades estén en un estado no válido, y porque creo que la vista html de las entidades y la entidad son conceptos diferentes y podrían ser objetos diferentes ya que la vista no podría exigir conocer todos los datos de la entidad).
Pero no me gusta declarar muchos atributos en el controlador (piense en un formulario de asistente grande). No estoy seguro de si es bueno escribir clases de javascript para la vista del modelo (una clase de entidad Employee y una clase NewEmployeeModelView o algo así que el controlador puede vincular al HTML).
¿Cómo es la forma habitual de abordar esto en el marco AngularJS?