1

我有一个如下的角度设置,试图模仿一些 excel 功能,其中我有一个嵌套在 ng-repeat 中的控制器。

<tr ng-repeat="lw in lw_list"   my-lw   ng-model="lw" 
<td>
        <!-- next two elements act as an excel cell, one for inputing data, they other for displaying calcualtion result -->
        <div ng-controller="MyCellCtrl">
            <input type="text" class="inputdiv" ng-model="lw.library.name"   >in</input>                        
            <div  class="output"   ng-bind="getCellValue(lw.library.name)" syle="postion:absolute" contenteditable="True" >out</div> 
        </div>


        <div ng-controller="MyCellCtrl">
           more input / div pairs to act as a new cell      
           .....
        </div>

</td>

我设置了样式表,以便输入和输出位于相同的位置,并隐藏/不隐藏,这样它们就像一个 excel 单元格(你输入一个公式,然后当你离开焦点时,它会更新内容)。

无论如何,当我在 getCellValue() 函数中放置一个 console.log() 以显示正在调用的控制器实例,然后输入一个特定的单元格时,我可以看到 getCellValue() 在每个单元格上都被调用。

当输入更新而不在每个实例上调用该方法时,是否有某种方法可以调用 getCellValue()?

(我将此代码基于本教程中的代码: https ://github.com/graunked/spreadsheet 您可以通过在计算函数中放置一个 console.log 来看到相同的行为。如果将数组增加到 20 x 20 个元素,当您键入任何内容时它开始变慢。)

4

1 回答 1

0

当输入更新而不在每个实例上调用该方法时,是否有某种方法可以调用 getCellValue()?

<div class="output" ng-bind="foo"> 

然后使用$watch

function MyCellCtrl($scope) 
  {
  $scope.foo = $scope.lw.library.name;

  $scope.$watch('foo', function(newValue) {
    $scope.foo = getCellValue($scope.foo);
    });
  }

viewChangeListeners用作替代品:

function MyCellCtrl($scope) 
  {
  $scope.foo = $scope.lw.library.name;

  this.$viewChangeListeners.push(function(newValue) {
    $scope.foo = getCellValue($scope.foo);
    });
  }

参考

于 2014-12-20T14:58:23.837 回答