2016-03-03 41 views
15

Ho lavorato in Angular 1. Aveva chiaramente un controller che fungeva da mediatore tra View e Model. Mi sono reso conto che in Angular 2 non abbiamo alcun controller in quanto tale.Angular2 mvc?

Quindi possiamo ancora chiamare Angular 2 come un framework MVC ?. So che MVC è un modello di progettazione e lo si implementa in qualsiasi lingua. Ma, per quanto riguarda Angular 1, ho sentito da molti che si tratta di un framework MVC e la maggior parte degli esempi che ho visto hanno chiaramente detto che Angular 1 è MVC e Controller separa Model from View. Quindi, mi stavo chiedendo, ora che hanno Componenti in Angular2, possiamo ancora chiamarlo come MVC? O come i componenti stessi seguono il paradigma MVC, perché vedo che in ogni componente facciamo separatamente vista e dati e utilizzare l'associazione, forse possiamo ancora chiamarlo come un MVC.

+0

Non che questo sia di grande aiuto, ma penso che sia definito come un framework MV * (o MVW Qualunque), quindi hai una licenza su come implementare l'ultima parte. – lintmouse

+1

La documentazione di angular2 ha una grande panoramica dell'architettura. Può essere trovato qui: https://angular.io/docs/ts/latest/guide/architecture.html. Sebbene Angular2 sia basato su componenti, hai ancora viste separate, ambiti separati per le tue visualizzazioni e servizi che ti consentono di collegarti al tuo back-end. – user2263572

+0

Considererei senz'altro Angular2 MVC. I servizi sarebbero il tuo modello, i componenti sono un mix di controller e visualizzazione. Metti la maggior parte delle tue funzioni logiche e di "Controller" all'interno della tua classe e allega la tua visualizzazione tramite il template. –

risposta

15

Angular 2 è più dell'architettura basata su componenti. Puoi assumere tutto come componente come direttive, servizi e così via. Mentre le direttive e i servizi sono in realtà per il supporto dei componenti di base, sono anche definiti in modo simile. Un componente di base contiene dipendenze, dettagli di una vista e dichiarazione di classe che possono essere considerati come controller. Quindi un componente ben definito consiste in un singolo set di architettura MVC.

per esempio (angolare versione 2 alfa):

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 { 
} 

} 

Nell'esempio di cui sopra si può vedere che classe "casa" può essere assunto come controllore, View è scritto con @View decoratore. La personalizzazione del componente è fornita da @component decorator. Inoltre è possibile vedere le diverse pratiche di iniezione delle dipendenze.

EDIT :: Esempio (Current angolare 2/4 versione)

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

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

In poche parole, quadro angolare 2 si basa basato componente MVC.

+0

Questo è quello che pensavo. Ma non ero sicuro se la mia comprensione fosse corretta o meno. –

+3

Penso che @View sia stato rimosso da Angular 2. – Phil

7

I componenti e le direttive sono i controller, il modello (HTML) elaborato da Angular e il browser è la vista e, se non si combina il modello con il controller, si ottiene un modello MVC.

+0

Quello che vedo in molti esempi sul Web sono le persone che utilizzano i servizi temporanei (istanza separata per componente) per definire i metodi http per accedere ai dati dal server, che viene quindi memorizzato direttamente nei componenti della vista. In questo caso non hai affatto uno strato di modello, quindi per coordinare la visualizzazione di più viste devi avere viste separate che parlano direttamente l'una con l'altra, oppure arrotondare ogni interazione tramite il server.Cercando di convincere la mia squadra che questo non è un approccio adeguato per una ricca interazione SPA e che ciò di cui abbiamo bisogno è un adeguato livello di modello si sta dimostrando impossibile. – Neutrino

+0

I servizi sono il modello è tutto. Se visualizzi gli stessi dati, condividi semplicemente un servizio con più componenti. Spesso è una buona idea usare le osservabili per notificare le opinioni sui cambiamenti nei servizi. Alcuni mettono la logica aziendale in componenti, altri preferiscono mantenere i componenti stupidi e avere una logica aziendale nei servizi. Puoi avere più livelli di servizi (a seconda o dove li fornisci). È possibile avere un servizio fornito direttamente su un componente (per ottenere un'istanza per ogni istanza del componente) o un componente padre o servizi singleton fornendoli in '@NgModule()' –