2017-02-22 3 views
1

Dies ist verwirrend. Es ist so einfach, aber ich kann es nicht zur Arbeit bringen. Ich füge dem Formular per Knopfdruck ein Eingabefeld hinzu (ursprünglich). An diesem Punkt bin ich nur versucht, einen Wert in der Ansicht zu sehen (daher der einfache p-Tag)Angular Dynamic Field in Form nicht in Sicht

HTML VIEW

<span>Add secondary field</span> 
<md-button class="md-fab md-mini" ng-click="vm.addVals()"> 
    <i class="material-icons">add</i> 
</md-button> 

<div ng-if="moreVal"> 
    <div data-ng-repeat="vl in valHolder.valArr track by $index"> 
    <p>My Value: {{vl.myVal}}</p> 
</div> 

-Controller

function EditFormController($scope, $sanitize, ngToast) { 
    var vm = this; 
    vm.addVals = addVals; 
    $scope.valHolder= {valArr: []}; 
    function addVals(){ 
    var ln = $scope.valHolder.valArr.length; 
    $scope.valHolder.valArr.push({myVal: 'Test'+ln}); 
    $scope.moreVal = true; 
    } 
}()); 

Ich habe überprüft, dass valArr is being Bei Klick auf die Schaltfläche werden neue myVal-Werte angezeigt. Aber ich kann nichts in der Ansicht sehen. Das ng-repeat-div ist leer. Warum passiert dies? Ich habe den ganzen Tag nach einer Lösung gesucht, aber das ist so absurd, dass niemand dieses Problem zu haben scheint. Ich weiß nicht, was ich falsch mache. Ich würde wirklich eine Antwort schätzen.

+0

Haben Sie irgendwelche Fehler in der Konsole? – Mistalis

+0

Verwenden Sie Controller als Syntax in Sicht? Kannst du bitte deinen ganzen HTML Code zeigen? –

+0

@Mistalis Kein Fehler in der Konsole – KVNam

Antwort

0

schreiben Code unten in Ihrem Controller:

var self = this; 
self.valHolder= {valArr: []}; 
function addVal(){ 
    var ln = self.valHolder.valArr.length; 
    self.valHolder.valArr.push({myVal: 'Test'+ln}); 
    self.moreVal = true; 
} 

schreiben in Ihren HTML wie unten:

<div ng-if="moreVal"> 
    <div data-ng-repeat="vl in vm.valHolder.valArr track by $index"> 
    <p>My Value: {{vl.myVal}}</p> 
</div> 
+0

Sollte es nicht self.valHolder.valArr im HTML sein? – KVNam

+0

Nein, Sie verwenden Ihre Syntax wie ng-controller = "EditFormController als vm" richtig? Dann wird das Selbst deiner Meinung nach als vm bezeichnet werden. Oder wenn Sie in Route definieren, wäre es wie controlller: "EditFormController" und ControllerAs: "vm" –

+0

Eigentlich bin ich nicht, ich habe nur ng-controller = "EditFormController" angegeben und es scheint gut zu funktionieren. Nicht sicher, ob ich hier etwas verpasse. Ich lerne immer noch mit Angular, entschuldige die Ignoranz. – KVNam

0

Ihre addVal-Funktion wird nicht aufgerufen. Bitte Ihre HTML-Ansicht wechseln

<span>Add secondary field</span> 
<md-button class="md-fab md-mini" ng-click="addVal()"> 
    <i class="material-icons">add</i> 
</md-button> 

<div ng-if="moreVal"> 
    <div data-ng-repeat="vl in valHolder.valArr track by $index"> 
    <p>My Value: {{vl.myVal}}</p> 
</div> 

und Controller-Code in this-

$scope.valHolder = { valArr: [] }; 
$scope.addVal = function() { 
    var ln = $scope.valHolder.valArr.length; 
    $scope.valHolder.valArr.push({ myVal: 'Test' + ln }); 
    $scope.moreVal = true; 
} 

Falls in this- Sie verwenden ControllerAs Syntax und Sie haben controllerAs angegeben: "vm", dann wird Ihr Code sein unter

<span>Add secondary field</span> 
<md-button class="md-fab md-mini" ng-click="vm.addVal()"> 
    <i class="material-icons">add</i> 
</md-button> 

<div ng-if="vm.moreVal"> 
    <div data-ng-repeat="vl in vm.valHolder.valArr track by $index"> 
    <p>My Value: {{vl.myVal}}</p> 
</div> 

und Controller-Code in this-

var self = this; 
self.valHolder = { valArr: [] }; 
self.addVal = function() { 
    var ln = self.valHolder.valArr.length; 
    self.valHolder.valArr.push({ myVal: 'Test' + ln }); 
    self.moreVal = true; 
} 
+1

addVal Funktion wird aufgerufen. Das war ein Tippfehler meinerseits. Es tut uns leid. Ich habe mit Konsolenanweisungen debuggen und ich weiß, dass ValArr korrekt ausgefüllt wird. Das Problem besteht nur darin, dass nichts angezeigt wird. – KVNam

+0

Ich habe es gerade an meinem Ende versucht und die Lösung, die ich gab, funktioniert. Haben Sie $ scope.addVal = function() {...} in Ihrem Controller-Code hinzugefügt? –

+0

Finden Sie meine aktualisierte Antwort incase Sie verwenden controllerAs Syntax –

0

Sie verwenden ng-click="vm.addVals()" und $scope im Controller.

Ich denke, Sie sollten var vm in Controller auch verwenden. Fügen Sie diese Zeilen:

var vm = this; 
vm = {}; 

und

vm.addVals = addVals; 
+0

Ich stimme zu, dass dieser Konflikt zu dem Problem geführt hat, aber Ankit Vadi hat die Antwort zuerst bekommen. Danke – KVNam