2013-05-10 12 views
7

c'è comunque la possibilità di accedere se una proprietà o un'espressione vincolata non riesce?È possibile registrare errori di associazione dati angolari?

cioè

<input type="text" ng-model="user.name" /> 

Log quando l'utente o il nome non è definito?

Modifica: Sembra che ci sia molta confusione su come questo potrebbe accadere. Supponiamo che io usi un viewmodel per più viste (O sono molto smemorato)

Imaging che cambio il codice JS in modo che quel nome sia ora user.firstName e ho dimenticato di aggiornare la mia vista. Mi piacerebbe averlo registrato in fase di esecuzione in modo che io possa risolvere il problema.

+0

È necessario assicurarsi che i dati siano validi nel controller – Ven

+0

Desidero sapere se i nomi delle variabili non sono sincronizzati tra la vista e il controller/scope –

+0

come potrebbe accadere? – Ven

risposta

1

Come altri hanno menzionato nei commenti, l'associazione dati non "fallirà" di per sé quando l'attributo non è definito nell'oscilloscopio, ma creerà tale attributo sullo scope in modo trasparente.

Se si desidera un comportamento di notifica quando il nome non viene trovato, è possibile ottenerlo manualmente decorando la direttiva ng-model per verificare se il suo valore è definito sull'ambito al momento in cui è stato inserito nel DOM.

.config(['$provide', function($provide) { 
     $provide.decorator('ngModelDirective', ['$delegate', function($delegate){ 
      var directive = $delegate[0]; 

      // Save the old link function 
      var link = directive.link; 
      directive.compile = function() { 
       return function(scope, element, attrs) { 
        link.apply(this, arguments); 

        // Now that we've applied the old link function, we can add 
        // any extra checks or steps we want 
        if (!objHasProperty(scope, attrs.ngModel)) { 
         alert("using ng-model value '" + attrs.ngModel +"' that wasn't defined first!" 
        } 
       }; 
      }; 

      return $delegate; 
     }]); 
    }]) 

Questa verifica la presenza di una definizione del valore ng-modello nel campo di applicazione del controller e di allarme se non è impostato.

Vedere un funzionamento jsfiddle di come questo potrebbe registrare un errore di battitura.

Non ho provato questo o pensato a ogni scenario, quindi è possibile che sia davvero rotto da qualche parte ... Sono anche incerto su come si tratterà di trovare attrs che sono definiti nell'ambito del genitore.

Inoltre, vedere this nice blog post per ulteriori informazioni sulle direttive di decorazione.

+0

Abbiamo appena provato questo con Angular 1.3.8 e sto correndo in un valore non definito per il collegamento quando tento di chiamare il metodo apply. direttiva.link non è definito. : -/Non ne so abbastanza su questo per andare molto più a fondo ora. –

Problemi correlati