Mientras Model-View-Controller (MVC) ha adquirido diferentes matices de significado a través de los años desde que apareció por primera vez, estos frameworks incorporan los principios básicos del patrón MVC original a su manera de construir aplicaciones web actuales.
Es un framework que nos permite usar la metodología MVC en la realización de interfaces web complejas como las usadas en la mayoría de aplicaciones web actuales donde casi toda la interacción ocurre en el lado del cliente.
AngularJS es un framework estructural para aplicaciones web dinámicas. AngularJS te permite utilizar HTML como un lenguaje de plantillas, a la vez que permite extender la sintaxis de HTML para expresar los componentes de las aplicaciones de forma clara y consisa. De entrada, elimina la necesidad de escribir gran parte del código que estamos acostumbrados a escribir mediante la utilización binding de datos e inyección de dependencias. Y todo ocurre en JavaScript en el navegador, lo que lo hace un socio ideal de cualquier tecnología de servidor. Angular es lo que habría sido HTML si hubiera sido diseñado para aplicaciones. HTML es un gran lenguaje declarativo para documentos estáticos. No contiene mucho de lo necesario para la creación de aplicaciones, y como consecuencia crear aplicaciones web es un ejercicio en el que se tiene que engañar al navegador para uqe haga lo que quiero.
App.Router.map(function() {
this.route("about");
this.route("favorites", { path: "/favs" });
});
Se utiliza para la vinculación directa de URLs a controladores y vistas (parciales como HTML). Este observa $location.url() e intenta mapear la ruta a una de ruta definición existente. Se pueden definir rutas a través de la API de $routeProvider. El servicio $route se utiliza normalmente junto con la directiva ngView y el servicio de $routeParams.
angular.module('meetup', []).
config(function($routeProvider) {
$routeProvider.
when('/people/:idperson', {
controller: PersonCtrl,
templateUrl: 'partials/person.html'
}).
otherwise({redirectTo: '/'});
});
App.SongController = Ember.ObjectController.extend({
duration: function() {
var duration = this.get('model.duration'),
minutes = Math.floor(duration / 60),
seconds = duration % 60;
return [minutes, seconds].join(':');
}.property('model.duration')
});
Los controladores son el comportamiento detrás de los elementos DOM. AngularJS permite expresar el comportamiento de manera limpia y legible sin el habitual trabajo de actualización del DOM, registro de callbacks u observar los cambios del modelo. En general, un controlador no debería tratar de hacer demasiado. Debería contener sólo la lógica de negocio necesaria para una única vista.
function VerEventoCtrl($scope, $routeParams, $http, People) {
$scope.users = [];
$scope.people = People;
}
<ul>
{{#each person in people}}
<li>Hello, {{person.name}}!</li>
{{/each}}
</ul>
En Angular, la vista es el DOM cargado y renderizado en el navegador, después de que Angular ha transformado el DOM basado en la información en el template, el controlador y el modelo.
En la implementación MVC de Angular, la vista tiene conocimiento del modelo y el controlador. La vista conoce el modelo donde se produce el enlace de datos bidireccional. La vista tiene conocimiento del controlador a través de directivas Angular, como ngController y ngView y a través de bindings de la siguiente forma: {{someControllerFunction()}}. De esta forma, la vista puede llamar a funciones en un controlador asociado.
<ul>
<li ng-repeat="person in people">Hello, {{person.name}}</li>
</ul>
App.Person = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
birthday: DS.attr('date'),
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
});
Dependiendo del contexto de la discusión en Angular, el término modelo puede referirse a un objeto que representa una entidad (por ejemplo, un modelo llamado "phones" con su valor siendo una array de phones) o el modelo de todos los datos de la aplicación (todas las entidades). En Angular, un modelo es cualquier dato que es accesible como una propiedad de un objeto de ámbito Angular. El nombre de la propiedad es el identificador del modelo y el valor es cualquier objeto JavaScript (incluyendo primitivas y arrays). El único requisito para que un objeto JavaScript sea un modelo en Angular es que el objeto debe ser referenciado por un ámbito Angular como una propiedad de ese objeto de ámbito. Esta referencia de la propiedad puede crearse explícitamente o implícitamente.
angular.module('modelDemo').service("authorListModel", function() {
var fowler = {
name: "Fowler",
quote: "Any fool can write code that a computer can.."
},
twain = {
name: "Twain",
quote: "Why, I have known clergymen, good men.."
},
poe = {
name: "Poe",
quote: "Deep into that darkness peering, long .."
};
this.list = [fowler, twain, poe];
})
https://github.com/edsadr/MedellinEmberJS
https://github.com/edsadr/MedellinAngularJS