2013-04-30 7 views
14

Come follow-up ancora riguardo a questa plunker:Errore: espressione del modello non cedibile: undefined (direttiva: childOne)

plunker

Se ho rivedere la console in Chrome quando si seleziona un elemento in bambino 1, ottengo il seguente errore:

errore: l'espressione del modello non cedibile: undefined (direttiva: childOne)

Sono completamente sconcertato perché l'elemento direttivo è un elemento, non un attributo e designato come tale nella direttiva stessa.

risposta

22

TL; DR; - Il problema è che gli attributi sono snake-case e la definizione dell'ambito li trasforma in camelCase.

bene bisogna:

app.directive('childOne', function() { 
    return { 
     restrict: "E", 
     replace: true, 
     scope: { 
      labelName: "@", 
      selectPhrase: "@", 
      ngModel: "=", 
      options: "=", 
     }, 
     template: '<span><div class="local-label">{{labelName}}: </div><div style="width:15px;display:inline-block;"></div>' + 
        '<span style="display: inline-block;"><select ng-model="ngModel" ng-options="o.Id as o.Name for o in options | orderBy:\'Name\'" class="formRequire" required><option value="" selected="selected">{{selectPhrase}} ...</option></select>' + 
        '</span></div></span>' 
    }; 
}) 

Il problema è che si associa ngModel ma l'elemento figlio-one non fornisce un valore per esso. Se commento quella parte sembra funzionare bene.

Sembra che quando si dispone di "=" attacchi del perimetro significa obbligatorio, anche gli attributi si trasformano da serpente caso a camelCase quando definito in javascript mondo

PS: E ' vero l'errore è un po 'vago

+1

Grazie Liviu, davvero non avrei dovuto usare quel plunker perché non l'ho creato così non ho potuto modificarlo. Ho cambiato il plunker in modo da poter mostrare la correzione. – Bye

+0

Grazie amico per le modifiche alle trasformazioni di camelCase. nel mio caso, il nome dell'attributo con underscore era il problema. –

+0

C'è un modo per risolvere questo problema in modo che non sia non assegnabile? – ajbraus

3
<child-one 
     label-name="Child 1" select-phrase="Please Select Clutch Type" 
     selectModel="ClutchType.Id" options="clutchTypes" > 
</child-one> 


selectModel="ClutchType.Id" 

avrebbe dovuto essere

select-model="ClutchType.Id" 
Problemi correlati