2016-06-09 20 views
0

Ich versuche eine Elternansicht (mit einem Controller) zu erstellen, die eine angularjs-Komponente hat. Die übergeordnete Ansicht liefert die Daten an die Komponente durch eine Zwei-Wege-Bindung (dies ist ein Ergebnis eines Web-Service, so dass die Daten ein JSON-Objekt sind). Ein Teil der Daten wird erneut von der Komponente an eine andere verschachtelte Komponente geliefert. Wenn ich jetzt die Daten in der verschachtelten Komponente durch ein Textfeld ändere, tritt folgende Ausnahme auf: angular.js: 13424 Fehler: [$ compile: nonassign] Ausdruck 'undefined' im Attribut 'attributDetailDto' verwendet mit der Anweisung 'catAuswertungsparameterBearbeitung' ist nicht -zuweisbar!angularJS 1.5 verschachtelte Komponenten

JS der Komponente

angular.module('catApp').component('catAuswertungsparameterBearbeitung', { 
    controller : CatAuswertungsparameterBearbeitungController, 
    templateUrl : 'resources/js/konfiguration/auswertungsparameter/catAuswertungsparameterBearbeitung.html', 
    bindings : { 
    attributDetailDto : '=' 
    } 
}); 

function CatAuswertungsparameterBearbeitungController($translate) { 
    var ctrl = this; 
} 

HTML der Komponente

... 
<cat-textfeld min=1 max=50 wert="$ctrl.attributDetailDto.bezeichnung"></cat-textfeld> 
... 

JS verschachtelter Komponente cat-Textfeld

angular.module('catApp').component('catTextfeld', { 
    controller : MinMaxTextfeldController, 
    templateUrl : 'resources/js/fwk/catTextfeld.html', 
    bindings : { 
    wert : '=', 
    min : '@', 
    max : '@' 

    } 
}); 

function MinMaxTextfeldController($translate) { 
    var ctrl = this; 

HTML verschachtelter Komponente

<input type="text" class="textfeld" name="textfeld" ng-model="$ctrl.wert"> 

Haben Sie irgendwelche Ideen? Vielen Dank :)

Antwort

1

Oh verwenden, können Sie nicht helfen ich, weil ich es total versäumt habe, die erste Komponente zu nennen. Das ist nicht sicher arbeiten:

<cat-auswertungsparameter-bearbeitung attributDetailDto="attributDetailDto"></cat-auswertungsparameter-bearbeitung> 

Da Winkel teilt auch Kamel-Fall-Attribute:

<cat-auswertungsparameter-bearbeitung attribut-detail-dto="attributDetailDto"></cat-auswertungsparameter-bearbeitung> 

Entschuldigung für Ihre Zeit

0

Wenn Sie bindings in Angular 1.5 verwenden, können Sie die Bindungsparameters als optional deklarieren, wie folgt: wert: '=?'. Auf diese Weise wird die Verwendung der Komponente catAuswertungsparameterBearbeitung nicht die Verwendung aller Bindungsattribute erzwingen.

+0

auf diese Weise untergräbt ich tatsächlich etwas im Textfeld eingeben kann ohne Ausnahme, aber die attributDetailDto.bezeichnung wird nicht aktualisiert. – fuechsle

0

eine kleine Beratung, starten Sie ein Muster wie diese und Verwirrung dann

<input type="text" class="textfeld" name="textfeld" ng-model="model.wert"> 

zu vermeiden

app.component("someComponent", { 
    bindings: { 
     something: '=' 
    }, 
    templateUrl: "app/templates/layer-list-component.html", 
    controllerAs: "model", 
    controller: function() { 
    var model = this; 
    } 
}); 

zu verwenden, wenn das Symbol $ Mann

+1

'$ ctrl' ist ein Standardname, der dem Controller seit angular 1.5 gegeben wurde, ich sehe kein Problem damit. – AranS

+0

Es gibt kein Problem, aber da Komponenten tief verschachtelt werden, kann es zu Verwirrung kommen, daher ist es besser, einen anderen Namen zu haben, damit Sie Bindungen besser verfolgen können – elasticrash

Verwandte Themen