【发布时间】:2017-04-03 04:43:12
【问题描述】:
场景是一个使用 JavaScript 和 AngularJS 的数独游戏。
数独字段是数组(列)的数组(行)。所有数组的长度都是 9。我将此数独字段命名为 matrix。函数exampleMatrix()返回这样一个已经填充了一些字段的矩阵。
updateValue(sudokuMatrix, row, col, val) 函数将矩阵sudokuMatrix 中位置行row 和列col 的字段更改为值val。
function TestController($scope) {
$scope.matrix = exampleMatrix();
$scope.updateValue = updateValue;
$scope.getMatrixVal = function getMatrixVal(row, col) {
return $scope.matrix[row][col];
};
}
我想要做的是将矩阵的每个字段显示为 HTML 中的 <input type="text"> 字段。我希望所有字段最初都设置为它们在矩阵中的值。如果文本字段的输入发生更改,我希望在 $scope.matrix 对象中更新值。
使用以下 HTML/AngularJS 代码,我可以用矩阵的值填充字段,没有问题:
<div ng-repeat="(rowIndex,row) in matrix track by $index">
<input type="text" size="1" value="{{col}}"
ng-repeat="(colIndex,col) in row track by $index">
</div>
当然,我还不能更新 $scope.matrix 对象中的值。
我面临的问题是
- 如果我更改输入字段中的值,
matrix应该会更新该值。我可以用ng-change="updateValue(matrix, rowIndex, colIndex, inputVal)"做到这一点。 - 为了能够用
ng-change更改范围内的matrix,我需要一个ng-model,它将字段的输入绑定到一个变量:ng-model="inputVal" - 如果我添加这两行,输入字段最初不会使用范围的
matrix对象中的值填充。
当前代码如下所示:
<div ng-repeat="(rowIndex,row) in matrix track by $index">
<input type="text" size="1" value="{{getMatrixVal(rowIndex, colIndex)}}"
ng-model="inputVal"
ng-change="updateValue(matrix, rowIndex, colIndex, inputVal)"
ng-repeat="(colIndex,col) in row track by $index">
</div>
我的猜测是,当站点生成时,ng-model 将输入字段的空值赋值给inputVal,然后立即触发ng-change。因此,矩阵的每个字段都将填充一个空值。 AngularJS 没有抛出任何错误,所以我不能确定。无论如何,我在这里不知所措,不知道如何让初始值最初写入字段,ng-change 只能在之后调用。我感谢每一个帮助。
JSFiddle:https://jsfiddle.net/30xkedmp/
JavaScript:http://pastebin.com/8cge8BXs HTML:http://pastebin.com/X0YUPU4h
【问题讨论】:
-
能否分享一个您已部署代码的网址以便于测试?
-
在文章末尾附加了代码的链接。抱歉,我还没有在线部署它。
-
创建小提琴,这对我们来说很容易。 jsfiddle.net
-
终于搞定了。在文章末尾附加链接。
标签: javascript html angularjs arrays