【问题标题】:Obtain User Input Inside An NgRepeat Directive In AngularJS在 AngularJS 的 NgRepeat 指令中获取用户输入
【发布时间】:2018-07-06 07:43:50
【问题描述】:

我有一个 AngularJS 应用程序,它有一个 ngRepeat 指令。在指令中,我有一个文本框,用户可以使用它来输入数值。当文本框发生变化时,我想接受用户输入并对其采取行动。如何将用户输入传递给我的 ngChange 事件?

<table>
  <tr ng-repeat="d in vm.data">
    <td><input type="number" value="{{ d }}" ng-change="vm.onChange(userInput)" /></td> <!-- How can I get the user input here? -->
  </tr>
</table>


(function () {
  var app = angular.module('TestApp', []);
  app.controller('TestCtrl', [function () {
    var vm = this;
    vm.data = [1, 2, 3];

    vm.onChange = function (inputValue) {
      // act on the change event...
    };

  }]);
})();

【问题讨论】:

    标签: javascript angularjs angularjs-directive angularjs-ng-repeat


    【解决方案1】:

    观察

    • 您需要将模型添加到$scope,即:$scope.data = [1, 2, 3];。
    • 指令ng-change 与ng-model 一起使用,因此您需要为每个输入设置该指令,即:&lt;input ng-model='d' ng-change='onChange(d)' type="number" value="{{ d }}"&gt;

    看这段代码sn-p:

    var app = angular.module('TestApp', []);
    app.controller('TestCtrl', ['$scope', function($scope) {
      $scope.data = [1, 2, 3];
    
      $scope.onChange = function(inputValue) {
        console.log(inputValue);
      };
    }]);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js"></script>
    
    <div ng-app='TestApp'>
      <table ng-controller="TestCtrl">
        <tr ng-repeat="d in data">
          <td>
            <input ng-model='d' ng-change='onChange(d)' type="number" value="{{ d }}">
          </td>
          <!-- How can I get the user input here? -->
        </tr>
      </table>
    </div>

    如您所见,现在 onChange 函数会针对 input 中的每次更改而被调用。

    【讨论】:

      【解决方案2】:

      您需要将值绑定到 VM 中的某些内容。这是一个例子:

      (function () {
        var app = angular.module('TestApp', []);
        app.controller('TestCtrl', [function () {
          var vm = this;
          vm.data = [1, 2, 3];
          vm.nums = [];
      
          vm.onChange = function (i) {
            console.log(nums[i]);
          };
        }]);
      })();
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
      <table ng-cotroller="TestCtrl">
        <tr ng-repeat="d in vm.data">
          <td>
            <input type="number" ng-model="vm.nums[$index]"
                   ng-change="vm.onChange($index)">
          </td>
        </tr>
      </table>

      【讨论】:

        【解决方案3】:

        首先,您的输入语法缺少“>”。
        其次,您需要在输入中添加 ng-model。

        这是代码:

        <tr ng-repeat="d in vm.data">
            <td><input type="number" ng-change="vm.onChange(d.val)" ng-model="d.val"></td> 
        </tr>
        
        var vm = this;
            vm.data = [{val:1}, {val:2}, {val:3}];
        
            vm.onChange = function (val) {
              console.log(val);
            };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-01
          • 1970-01-01
          • 2016-11-13
          • 1970-01-01
          • 2017-05-29
          • 2014-03-20
          • 1970-01-01
          相关资源
          最近更新 更多