【问题标题】:AngularJS textbox value undefinedAngularJS文本框值未定义
【发布时间】:2017-04-08 00:38:01
【问题描述】:

我创建了一个指令,它将 textbox1 的值复制到 textbox2。

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 的值始终是未定义的,直到我手动输入一个值。

【问题讨论】:

  • 您对两个输入使用相同的id="textbox1"
  • $('textbox2') 正在寻找一个元素,你忘了# 描述一个ID
  • 对不起,已经修改了上面的sn-p。将它们放在这里时只是一些错字,但无论如何..仍然不起作用。
  • 这是设计使然。为什么不对两个输入使用相同的 ngModel?
  • 我已经在文本框上使用了 ngModel。

标签: javascript angularjs angularjs-directive angularjs-scope


【解决方案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>

【讨论】:

  • 这是从 textbox1 绑定到 textbox2 但提交表单时问题仍然存在。 vm.textbox2 仍然有 undefined 值,除非我在 textbox2 上手动输入值。
  • 我在这里测试过,它按预期工作,你能告诉我你的 html 吗?
  • 没关系,您错过了在提交事件中生成查询字符串所需的名称属性
  • name 不是必需的,因为我从 ng-model 获取值并通过 ajax 传递。正如我所说的,我可以得到 textbox1 的值,但不能得到 textbox2
  • 如果第一个小提琴,基于我的解决方案正在工作,有什么问题?继续使用我的解决方案。第二个不起作用,因为正如我在回答中所说,JQuery 方法 val 不会触发模型中的更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2013-11-04
  • 1970-01-01
  • 2019-05-25
  • 2015-04-26
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多