【问题标题】:watch on getSelectedRows()观看 getSelectedRows()
【发布时间】:2015-01-06 13:40:39
【问题描述】:

我有一个grid,在角度控制器中有一个复选框列,我想在其复选框单元格上设置一个watch,点击,

为此,我使用getSelectedRows() 来指示所选单元格的索引数组是否已更改。

这里是代码 -

$scope.grid = new Slick.Grid(...)
$scope.$watch('$scope.grid.getSelectedRows()', function(newVal, oldVal){
     console.log(arguments);
});

但是当我打开任何这个网格复选框时 - 它不会进入观察者功能。

如何让它真正关注我的复选框点击?

【问题讨论】:

    标签: javascript angularjs slickgrid


    【解决方案1】:

    这是正确的方法

     $scope.$watch(funstion(){ return $scope.grid.getSelectedRows() }, function(newVal, oldVal){
    
        console.log(arguments);
     });
    

    但是由于角度的消化周期,它变得迟了。您可以在 setTimeout 函数中检查正确的值

    $scope.$watch(funstion(){ return $scope.grid.getSelectedRows() }, function(newVal, oldVal){
    
        setTimeout(function(){
          var row = $scope.grid.getSelectedRows();
          //do your staff here
        },0)
     });
    

    【讨论】:

    • 既然你在 Angular 中,你可以使用 $timeout 而不是 setTimeout,这并不是说它有很大的不同,但它更像是 Angular ;)
    • 在某些情况下使用 $timeout 时要小心,它可能会导致一些循环事件,是的,我们是有角度的,但我们在这里破解了角度......如果你需要调用一个,你可以在 setTimeout 中使用 $timeout新的消化周期。 Look at this post
    【解决方案2】:

    可能会更适合

    grid.onSelectedRowsChanged.subscribe(function(e, args){
        $scope.$emit('selectedRowsChanged', *someData*);
    });
    
    $scope.$on('selectedRowsChanged', function(*someData*){
        _do your stuff here_
    })
    

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2019-03-16
      相关资源
      最近更新 更多