Uso di ng-init per inizializzare i dati nel controller Angolare

4

Recentemente ho trovato quanto segue in uno dei nostri progetti. In una delle nostre viste MVC passano i dati del modello a un controller angolare tramite la direttiva ngInit .

In xxx.cshtml :

<div ng-controller="AssessmentController"
     ng-init="Init('@Model.Status','@Model.ARN','@Model.AssessmentID','@Model.AssessorID',@Model.Contents, @Model.Date_of_Assessment.ToJsonTicks(),'@Model.HouseReferenceID',@Newtonsoft.Json.JsonConvert.SerializeObject(Model.House))">

Ho sottolineato che in base alla documentazione angolare , la direttiva ngInit non deve essere utilizzata per per inizializzare i controller.

Invece ho suggerito di inviare l'ID in ngInit direttiva:

<div ng-controller="AssessmentController"
     ng-init="Init('@Model.AssessmentID'">

Successivamente, usa $http service per ottenere il resto dei dati dal controller Angolare .

Lo sviluppatore rifiuta la mia idea dicendo che è più veloce semplicemente inviare tutti i dati tramite la direttiva ngInit invece di dover fare un'altra chiamata per ottenere i dati dal controller Angolare.

Cosa ne pensi di questo scenario? L'unico punto che ho ora è che questo codice è brutto e non secondo gli standard. Come convinceresti uno sviluppatore a seguire il percorso che ho suggerito? O ho sbagliato completamente qui?

    
posta Kumudu 28.08.2014 - 08:49
fonte

1 risposta

4

Versione breve: Perché stai servendo le viste Angolari dinamicamente?

La radice del problema

Guardando il tuo esempio, sembra che tu stia usando le viste Razor per iniettare i dati del modello nella vista. Questo sembra essere un modo abbastanza controproducente per ottenere dati in Angolare. Il percorso completo è simile a:

Controller MVC - > Razor View - > Controller angolare - > Vista angolare

Attraverso questo, stai incorporando il tuo modello attraverso una varietà di livelli, convertendolo avanti e indietro.

Per capire perché questo è problematico, facciamo un passo indietro. Angular è tipicamente utilizzato come framework di un'applicazione a pagina singola (SPA), in cui viene offerto il modello HTML stesso una volta-off (vaniglia HTML con le direttive ng- *). In un secondo momento, Angular può quindi utilizzare questo modello insieme a un modello (un oggetto JavaScript) per eseguire il rendering della vista e mantenerne i dati associati al modello. Questi modelli vengono in genere richiamati direttamente come oggetti JSON dal server.

Quindi, direi che l'uso tipico implicherebbe un numero molto limitato di template sul lato server e che la maggior parte della comunicazione dei dati si verificherebbe attraverso richieste XHR / JSON a qualcosa di simile all'API Web. In questo modo, la conversione in JSON è una conversione (automatica) diretta eseguita da MVC (o da qualsiasi libreria JSON scelta) e non è necessario ripetere te stesso su ciascun livello. Il tuo oggetto modello è appena pubblicato come JSON e Angular ora ce l'ha.

Efficienza: se accettiamo questo approccio, abbiamo una richiesta per caricare inizialmente il modello di visualizzazione e quindi una richiesta ogni volta che vorresti caricare un oggetto e renderizzare il modello. Come bonus aggiuntivo, le chiamate successive recupererebbero solo i dati e non i dati + verranno visualizzati ogni volta.

Raccomandazione

Per riassumere, penso che l'utilizzo che stai descrivendo sia già relativamente non standard. Naturalmente, non vi è nulla che vi impedisca di utilizzare Angular in questo modo, ma è controproducente e rende difficile parlare di quale sia l'approccio migliore. Sospetto che tu possa semplificare notevolmente la tua soluzione abbracciando pienamente l'approccio di Angular, piuttosto che lavorare contro di essa.

    
risposta data 15.10.2014 - 13:34
fonte

Leggi altre domande sui tag