【问题标题】:How to pass ng-model as parameter to controller如何将 ng-model 作为参数传递给控制器
【发布时间】:2018-02-16 19:34:41
【问题描述】:

如何将 ng-model 及其值作为参数从 html 传递给控制器​​中的函数。我试图将 ng-model 作为字符串传递给控制器​​,但它没有;任何人都可以告诉我如何去做吧。

HTML:

<input stopccp decimalpoint
      ng-model="vm.product.rate"
      placeholder="0"
      type="number"
      ng-change="vm.fillStarted()"
      maxlength="5"
      ng-keydown="vm.checkMaxLength(5, vm.product.rate)"
      ng-click= "vm.hideScrollContent()"/>

控制器:

var vm = this;
function checkMaxLength (maxLength, model) {
  $log.log('checkMaxLength got called', maxLength);
  $log.log('model is', model);
  $log.log('model value', model.value);
  // if (vm.product.rate.length === maxLength) {
  //   vm.product.rate.value = vm.product.rate.value.slice(0, -1);
  // }
}

日志:

checkMaxLength got called 5
model is 
model value undefined

【问题讨论】:

  • 试试 $scope.vm.product.rate
  • @zb22 我必须在 html 中做吗
  • @zb22 vm 很可能是 controller as 语法的作用域
  • 你能调用checkMaxLength方法吗。
  • @Ved 是的,我可以调用 checkMaxLength 方法

标签: javascript angularjs html ionic-framework


【解决方案1】:

您的代码按预期工作。当您第一次在 ng-keydown 上调用方法时,您将看不到任何值。对于第二个输入,您应该看到第一个输入值

<input stopccp decimalpoint
      ng-model="vm.product.rate"
      placeholder="0"
      type="number"
      ng-change="vm.fillStarted()"
      maxlength="5"
      ng-keydown="vm.checkMaxLength(5, vm.product.rate)"
      ng-click= "vm.hideScrollContent()"/>


function checkMaxLength (maxLength, model) {
  $log.log('checkMaxLength got called', maxLength);
  $log.log('model is', model);//enter 123 in input. You should see 12 here
  $log.log('model value', model.value);// It is wrong as model.value will always 
    be undefined

}

使用 ng-keyup 代替 ng-keydown 来查看日志中的输入。

【讨论】:

  • 型号名称是什么意思?
  • vm.product.rate
  • 你需要ng-model表达式而不是模型值?
【解决方案2】:

您的代码看起来完全正常,我想问题出在这里

var vm = this;

然后你需要给产品赋值,否则它会是未定义的。

this.product = {};
var vm = this;

【讨论】:

    【解决方案3】:

    您应该可以简单地在controller 中访问它。

    所以把你的ng-keydown改成:

    ng-keydown="vm.checkMaxLength(5)"
    

    然后在您的 checkMaxLength 函数中简单地使用:

    function checkMaxLength (maxLength) {
      $log.log('checkMaxLength got called', maxLength);
      $log.log('model is', vm.product.rate);
    }
    

    当然,在控制器内部你应该初始化你的产品对象:

    vm.product = {};
    

    为了使用其rate 属性作为模型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多