在 AngularJS 中的 NgRepeat 指令中获取用户输入
Obtain User Input Inside An NgRepeat Directive In AngularJS
我有一个 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...
};
}]);
})();
您需要将该值绑定到 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>
首先,您的输入语法缺少“>”。
其次,您需要在输入中使用 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);
};
观察结果
- 您需要将模型添加到
$scope
即:$scope.data = [1, 2, 3];
。
- 指令
ng-change
与 ng-model
一起工作,因此您需要为每个输入设置该指令,即:<input ng-model='d' ng-change='onChange(d)' type="number" value="{{ d }}">
看这段代码:
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>
如您所见,现在 input
中的每个更改都会调用 onChange
函数。
我有一个 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...
};
}]);
})();
您需要将该值绑定到 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>
首先,您的输入语法缺少“>”。
其次,您需要在输入中使用 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);
};
观察结果
- 您需要将模型添加到
$scope
即:$scope.data = [1, 2, 3];
。 - 指令
ng-change
与ng-model
一起工作,因此您需要为每个输入设置该指令,即:<input ng-model='d' ng-change='onChange(d)' type="number" value="{{ d }}">
看这段代码:
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>
如您所见,现在 input
中的每个更改都会调用 onChange
函数。