4

我有一个通过 via 迭代的二维数组ng-repeat。这个数组实际上是我正在构建的电子表格应用程序的一部分,其中电子表格中的初始值是数组的初始值。我编写了一个函数,可以在用户更改输入值时更新这个数组,但是,我被告知我需要使用$watch方法而不是onchange方法。

我真的很生气,因为我不明白如何通过该$watch方法更改初始数组的值。我看到它检测到更改,但我希望它跟踪该更改并实际更改初始数组。

这是我的 Javascript,包括$watch方法的开头:

sheet= function($scope, $parse){
    $scope.columns = headers;
    $scope.rows = allData.length;
    $scope.cells = {};
    $scope.$watch(
        function() {console.log("Change!");},
    );
    $scope.values = allData.map(function(c,row){
        return c.map(function(data){
            return {
                content: data,
                model: null,
                color: makeColors(data)
            };
        });
    });
};

changeData = function(row, col, data){
    allData[row][col] = data;
};  

我的 HTML:

<div ng-app ng-controller="sheet">
    <table>
        <tr class="column-label">
            <td ng-repeat="column in columns">{{column}}</td>
        <tr ng-repeat="value in values">
            <td class="row-label" ng-repeat="data in value">
                <div>
                    <input type="text" id="inputValue"  ng-model="data.content" class="{{data.color}}" onchange="changeData({{$parent.$index}},{{$index}},this.value)">
                </div>

            </td>
        </tr>
    </table>
</div>

如您所见,我使用$parent.$indexand$index值调用 changeData 函数,它允许我访问和更改初始数组。我不确定如何通过$watch.

4

1 回答 1

4

您的 $watch 缺少它正在观看的价值。没有它,它什么也做不了。

但是你为什么要经历这样的麻烦来更新你的模型呢?当您将 ng-model 绑定到输入时,您的模型会自动更新。

这是一个 plunker,展示了我将如何处理它:http ://plnkr.co/edit/Oxu1NV?p=preview

于 2013-07-09T20:40:41.917 回答