-1

Ich habe eine Direktive erstellt, in der der Wert von textbox1 in textbox2 kopiert wird.AngularJS Textboxwert undefined

function myCopyText() { 
    return { 
     restrict: 'A', 
     link: function(scope, element, attr) { 
      $('#textbox2').val($('#textbox1').val()) 
     } 
    } 
} 

Dann auf dem Textfeld:

<input type="text" id="textbox1" ng-model="vm.textbox1" my-copy-text /> 
<input type="text" id="textbox2" ng-model="vm.textbox2" /> 

Es funktioniert gut, bis ich das Formular abgeschickt, wobei vm.textbox2 immer nicht definiert ist. Aber wenn ich einen Wert manuell in textbox2 eingegeben habe, kann vm.textbox2 den Wert anzeigen.

Ich finde es seltsam, dass, wenn die Richtlinie die Wertzuweisung tun, vm.textbox2 ‚s-Wert nicht immer undefiniert, bis ich manuell einen Wert, indem Sie es in gesetzt.

+0

Sie die gleiche 'id =„textbox1“verwenden' für zwei Eingänge –

+0

' $ ('textbox2') 'sucht nach einem Element, Sie haben' # 'vergessen, eine ID darzustellen –

+0

Entschuldigung, habe das obige Snippet modifiziert. Nur ein paar Tippfehler beim Platzieren hier aber trotzdem .. funktioniert immer noch nicht. – basagabi

Antwort

1

, die durch Design ist. Der eckige Digest tritt ein, wenn Sie den Wert über das input/change Ereignis ändern, daher löst val() keinen setViewValue aus, daher wird der Modellwert nicht aktualisiert.

wird diese Richtlinie den Wert aus dem Modell/Ansicht replizieren Sie in der auf den Namen übergeben Replikat-to-Attribut:

function replicateTo($parse) { 
    return { 
     scope: false, 
     require: 'ngModel', 
     restrict: 'A', 
     link: function(scope, element, attr, ngModelCtrl) { 
      var target = $parse(attr.replicateTo); 

      var angularRender = ngModelCtrl.$render; 

      ngModelCtrl.$render = function(){ 
       angularRender(); 
       target.assign(scope, ngModelCtrl.$viewValue); 
      }; 

      ngModelCtrl.$viewChangeListeners.push(function(){ 
       target.assign(scope, ngModelCtrl.$viewValue); 
      }); 
     } 
    } 
} 

<input type='text' ng-model="vm.textbox1" data-replicate-to="vm.textbox2"/> <br> 
+0

Dies ist Bindung von Textbox1 zu Textbox2, aber das Problem besteht weiterhin beim Absenden des Formulars. 'vm.textbox2' hat immer noch einen' undefinierten' Wert, es sei denn, ich gebe einen Wert manuell in textbox2 ein. – basagabi

+0

Ich habe hier getestet und es funktioniert wie erwartet, können Sie mir Ihr HTML zeigen? – EProgrammerNotFound

+0

Vergesst, du hast die Eigenschaft name verpasst, die benötigt wird, um die Abfragezeichenfolge im Submit-Ereignis zu generieren. – EProgrammerNotFound

Verwandte Themen