Ecco un fork del tuo violino aggiornato che corregge un paio di dipendenze perse (eventApi
non iniettate nel controller, $timeout
non inserito nel servizio eventApi
). I miei commenti si baseranno su questo codice: http://jsfiddle.net/BinaryMuse/zww7e/1/
Questo violino ci porta correttamente al problema che hai postato su: "Impossibile leggere la proprietà 'lunghezza' di undefined" nel tuo filtro. In generale, i filtri dovrebbero essere in grado di gestire valori null/non definiti per impostazione predefinita. Vorrei semplicemente modificare il filtro per leggere qualcosa del genere:
return function (items, eventFilterType) {
var arrayToReturn = [];
if (items === undefined) return arrayToReturn;
// ...
}
Questo dovrebbe risolvere il problema di root; il violino ora funziona senza errori, anche se non sembra funzionare correttamente; per quanto posso dire, è perché si sta impostando $scope.eventCollection
invece di $scope.events
nella sezione if (live)
del controller. Effettuare questa modifica fa sì che i dati vengano effettivamente visualizzati nella vista.
Tuttavia, potrebbe essere interessato a un'altra proprietà di Angolare: quando si utilizza una promessa costruito con $q
, è possibile associare la vista direttamente alla promessa, e la vista sarà trattare come se tenuti al ha risolto il valore della promessa.Così, per esempio, è possibile effettuare le seguenti operazioni:
// in the service
$timeout(function() {
deffered.resolve(fakeEvents); // <-- resolve with the data
}, 2000);
return deffered.promise;
// in the controller
if (live) {
$scope.events = eventApi.async();
}
Ecco una versione aggiornata del violino che dimostra questa tecnica: http://jsfiddle.net/BinaryMuse/zww7e/2/
[Update]
Come sottolineato da Jeff in i commenti, Angular sta deprecando la promessa automatica di scartare; è possibile see the commit here, ma qui è il messaggio:
fix ($ parse): deprecate promessa unwrapping e renderlo un opt-in
Questo impegnano disabili promettono scartare e aggiunge $ parseProvider.unwrapPromises() getter/setter api che consente agli sviluppatori di di riattivare la funzione, se necessario. Promessa scartare supporto verrà rimosso dal angolare in futuro e questa impostazione consente solo per l'attivazione durante periodo di transizione.
Se lo scartare è abilitata, angolare registrerà un avvertimento su ciascun espressione che scarta una promessa (per ridurre il rumore, ogni espressione viene registrato onces solo). Per disabilitare questa registrazione utilizzare $parseProvider.logPromiseWarnings(false)
.
In precedenza le promesse si trovavano in qualsiasi punto dell'espressione durante l'espressione valutazione passata a non definita mentre non risolta e al valore di evasione se soddisfatta.
Questa è una caratteristica che non ha dimostrato di essere selvaggiamente utile o popolare, principalmente a causa della dicotomia tra l'accesso ai dati nei modelli (accessibile come valori grezzi) e il codice di controllo (accessibile come promesse).
Nella maggior parte del codice abbiamo risolto manualmente le promesse nei controller o tramite il routing e unificando l'accesso al modello in questo modo.
Altri aspetti negativi di Scartare automatica promessa:
- quando si costruisce componenti E 'spesso desiderabile per ricevere le promesse prime
- aggiunge complessità e rallenta la valutazione dell'espressione
- rende il codice espressione pre-generazione poco attraente a causa di la quantità di codice che deve essere generata
- rende il completamento automatico dell'IDE e il supporto degli strumenti difficile
- aggiunge troppa magia
CAMBIO INTERRUZIONE: $ parse e modelli in genere non saranno più disponibili promemoria. Questa funzione è stata deprecata e se assolutamente necessario, può essere riattivato durante il periodo di transizione tramite $parseProvider.unwrapPromises(true)
api.
inoltre, funziona dopo che la polvere si è depositata.inizialmente genera un sacco di errori sul filtro che non ha alcun elemento da trattare con – VBAHole
Invece di $ http, usa $ timeout (con un timeout di, per esempio, 2 secondi) per simulare un ritardo in jsfiddle. All'interno della richiamata di timeout, hardcodificare i dati come se tornassero dal server. Pubblica quel violino funzionante e daremo un'occhiata (perché il tuo violino ha più di un problema con $ http). –
Ecco un fork del violino che risolve un paio di altri problemi: (1) eventApi non veniva iniettato nel controller e (2) il modulo dell'app principale non dipendeva dal modulo chartApp. http://jsfiddle.net/BinaryMuse/WwR4U/ –