2017-04-07 49 views
-1

我創建了一個指令,它將textbox1的值複製到textbox2。AngularJS textbox value undefined

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

然後在文本字段:

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

,直到我提交的形式,其中vm.textbox2永遠是不確定的,它工作正常。但如果我在textbox2上手動輸入一個值,則vm.textbox2可以顯示該值。

我覺得很奇怪的是,當該指令執行賦值,vm.textbox2的價值永遠是不確定直到我手動通過鍵入其設置的值。

+0

您所使用的相同的'ID =「TextBox1的」'兩個輸入 –

+0

' $('textbox2')'正在尋找一個元素,你忘了'#'來描述一個ID –

+0

對不起,修改了上面的代碼片段。只是在將它們放置在這裏時出現了一些錯別字,但無論如何..仍然不起作用。 – basagabi

回答

1

這是由設計。當您通過 input/change事件更改該值時,角度摘要會啓動,因此val()將不會觸發setViewValue,因此模型值將不會更新。

該指令將複製從模型/視圖您在傳遞名稱的值複製到屬性:

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

這是從textbox1綁定到textbox2但提交表單時問題仍然存在。 'vm.textbox2'仍然有'undefined'值,除非我在textbox2上手動輸入一個值。 – basagabi

+0

我在這裏測試過,它按預期工作,你能告訴我你的HTML嗎? – EProgrammerNotFound

+0

沒關係,您錯過了在提交事件 – EProgrammerNotFound