2016-03-03 2 views
15

Ich habe in Angular gearbeitet 1.Es hatte eindeutig einen Controller, der als Vermittler zwischen View und Model fungierte. Mir wurde klar, dass wir in Angular 2 keinen Controller als solchen haben.Ist angular2 mvc?

Also können wir Angular 2 noch als MVC-Framework bezeichnen ?. Ich weiß, MVC ist ein Designmuster und Sie implementieren es in jeder Sprache. Aber in Bezug auf Angular 1 habe ich von vielen gehört, dass es ein MVC-Framework ist, und die meisten Beispiele, die ich gesehen habe, sagten klar, dass Angular 1 MVC ist und Controller Model von View trennt. Also, ich frage mich, jetzt, wo Komponenten in Angular2 haben, können wir es immer noch als MVC nennen? Oder wie Komponenten selbst MVC-Paradigma folgen, weil ich sehe, dass wir in jeder Komponente View und Data trennen und Binding verwenden, vielleicht können wir es immer noch als MVC bezeichnen.

+0

Nicht, dass dies viel hilft, aber ich denke, es wird als ein MV * (oder MVWhatever) Framework bezeichnet, also haben Sie eine Lizenz, wie Sie den letzten Teil implementieren. – lintmouse

+1

Die angular2-Dokumentation bietet einen großartigen Überblick über die Architektur. Es kann hier gefunden werden: https://angular.io/docs/ts/latest/guide/architecture.html. Obwohl Angular2 komponentenbasiert ist, haben Sie immer noch separate Ansichten, separate Bereiche für Ihre Ansichten und Dienste, mit denen Sie eine Verbindung zu Ihrem Backend herstellen können. – user2263572

+0

Ich würde definitiv Angular2 MVC betrachten. Dienstleistungen wären Ihr Vorbild, Komponenten sind eine Mischung aus Controller und View. Sie stellen die meisten Ihrer Funktionslogik- und "Controller" -Funktionen in Ihre Klasse und verknüpfen Ihre Sicht über das Templating mit ihr. –

Antwort

15

Angular 2 ist mehr von komponentenbasierter Architektur. Sie können alles als Komponenten wie Anweisungen, Dienste und so weiter annehmen. Während Direktiven und Dienste eigentlich zur Unterstützung von Basiskomponenten dienen, werden sie auch in ähnlicher Weise definiert. Eine Basiskomponente enthält Abhängigkeiten, Sichtdetails und eine Klassendeklaration, die als Controller betrachtet werden können. Also eine gut definierte Komponente besteht aus einzelnen MVC-Architektur.

zum Beispiel (Winkel 2 Alpha-Version):

import {Component, View, bootstrap, provide, NgClass} from 'angular2/angular2'; 

@Component({ 
    selector : "my-home" 
}) 

@View({ 
    directives : [NgClass, EditSettingPanel], 
    styles: ['.hidden{ display : none} .visible{ display : block}'], 
    templateUrl : "views/blog-panel.html" 
}) 
export class home { 
} 

} 

Im obigen Beispiel Sie diese Klasse „nach Hause“ sehen als Controller davon ausgegangen werden kann, wird mit Blick @View Dekorateur geschrieben. Die Komponentenanpassung wird von @component Decorator vorgenommen. Sie können auch verschiedene Abhängigkeiten Injektion Praxis sehen.

EDIT :: Beispiel (aktuelle Winkel 2/4 Version)

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'custom-component', 
    templateUrl: './template.html', 
    styleUrls: ['./style.scss'], 
}) 
export class CustomComponent {} 

Auf den Punkt gebracht, Winkel 2 Komponente basierend MVC-Architektur basiert Rahmen.

+0

Das ist, was ich dachte. Aber war nicht sicher, ob mein Verständnis richtig war oder nicht. –

+3

Ich glaube, @View wurde aus Angular 2 entfernt. – Phil

7

Die Komponenten und Anweisungen sind die Controller, die Vorlage (HTML) von Angular verarbeitet und der Browser ist die Ansicht, und wenn Sie das Modell nicht mit dem Controller kombinieren, erhalten Sie ein MVC-Muster.

+0

Was ich in vielen Beispielen im Web sehe, sind Leute, die transiente Dienste verwenden (separate Instanz pro Komponente), um HTTP-Methoden für den Zugriff auf Daten vom Server zu definieren, die dann direkt in den Ansichtskomponenten gespeichert werden. In diesem Fall haben Sie überhaupt keine Modellschicht. Um die Anzeige mehrerer Ansichten zu koordinieren, müssen Sie entweder separate Ansichten haben, die direkt miteinander kommunizieren, oder jede Interaktion über den Server stolpern.Ich versuche mein Team davon zu überzeugen, dass dies kein geeigneter Ansatz für ein reichhaltiges Interaktions-SPA ist und dass das, was wir brauchen, eine richtige Modellschicht ist, die sich als unmöglich erweist. – Neutrino

+0

Dienstleistungen sind das Modell ist alles. Wenn Sie dieselben Daten anzeigen, teilen Sie einfach einen Dienst mit mehreren Komponenten. Oft ist es eine gute Idee, Observables zu verwenden, um die Ansichten über Änderungen an Services zu benachrichtigen. Einige setzen Geschäftslogik in Komponenten, andere bevorzugen es, Komponenten dumm zu halten und Geschäftslogik in Services zu haben. Sie können mehrere Dienstebenen haben (abhängig davon, wo Sie diese bereitstellen). Sie können einen Dienst direkt für eine Komponente bereitstellen (um eine andere Instanz für jede Komponenteninstanz zu erhalten), oder eine Elternkomponente oder Singleton wie Dienste, indem Sie sie in '@NgModule()' bereitstellen. –