2015-05-24 51 views
6

幾天前(2015年5月),Google Chrome發佈了一個新版本(43.0.2357.65米)。
有了這個新的版本,一個ng-grid功能停止工作:ngGrid 2.0.14行選擇不適用於谷歌瀏覽器的新版本和ngAnimate

症狀:
當我點擊某一行,該行不突出

運行一些測試後,我已經成功地重現該問題從零開始:

  1. 創建一個需要ng-grid 2.0.14和ngAnimate的角度應用程序。
  2. 使用舊的Google Chrome瀏覽器版本,該行被正確突出顯示。
    谷歌瀏覽器的新版本,該行不突出(雖然它被選中)

我已經創建了兩個plunkers:

Plunkr 1:應用無ngAnimate
http://plnkr.co/edit/2pSBX9K0QaeaSihMKnGG?p=preview
當選擇的行,該行被突出顯示,而不管瀏覽器版本

Plunkr 2:應用程式ngAnimate
http://plnkr.co/edit/hyRO4fTwglSCL8KCTgHA?p=preview
選擇一行時,該行會在舊版Chrome中突出顯示,但在新版Chrome中不起作用!

另外,如果您在選中某行後檢查了Plunkr 2並使用Chrome Inspector,則可以看到該行確實獲得了類.ngRow.selected(此類使該行突出顯示,通過更改其背景顏色),但是Chrome是一個誰不是在視覺上代表這種變化(此類購買)

我該如何解決這個問題?任何線索?



編輯:
我已經創建的第三plunkr:
http://plnkr.co/edit/cWMlKEz39n8K52VWH9q8?p=preview

這是第二plunkr的叉,其中,我已經供殘疾人使用的動畫每個項目中沒有"angular-animate",即:

app1.config(['$animateProvider', function($animateProvider){ 
    $animateProvider.classNameFilter(/angular-animate/); 
}]); 

這是行得通的(現在行在選擇後突出顯示),但是如果您在應用程序中使用動畫,則這將主要會破壞其他所有動畫!比如bootstrap-ui模式。所以,這不是一個解決方案,而是一個想法:我只需要禁用ng-grid的動畫。 我該如何做到這一點?

classNameFilter(x)只爲其中的x類別的項目啓用動畫。是否有類似的功能來禁用某些項目的動畫?

+0

最後,我的角度應用程序使用'angular-animate'有兩個原因:'bootstrap ui modals'和庫'angular toaster'。所以我添加了'classNameFilter(/ modal | toast /)',它爲這些匹配的項目啓用了動畫,並且禁用了其他所有動畫(例如:ng-grids rows) – sports

+0

我發佈了一個可能的解決方案給GitHub問題:https: //github.com/angular-ui/ng-grid/issues/3574 - 嘗試重建列。我在Chrome版本43.0.2357.124上成功完成了這個工作。 –

回答

1

試試這個:

afterSelectionChange: function(rowItem, event) { 
     var x = document.querySelectorAll(".ng-scope .ngRow"); 
     x[rowItem.rowIndex].style["webkitUserSelect"] = "none"; 
     $timeout(function() { 
      x[rowItem.rowIndex].style["webkitUserSelect"] = "text"; 
     }, 100); 
} 

此修訂工作在幾個項目。儘管如此,請記住DI $超時。

+0

這是一些可怕的解決方案。想象一下,將該代碼塊粘貼到每個網格定義中。你可以在'afterSelectionChange'內使用'scope.gridOptions.ngGrid.buildColumns();'或'$(window).resize()'來代替那個塊。 – sports

0

作爲一種變通方法我創建了一個簡單的插件,你可以在NG-網格選項登記對象:

//controller 
$scope.gridOptions = { data : "myData", 
    plugins: [ new ngGridFixChromeSelectionBugPlugin() ] 
}; 

//plugin 
function ngGridFixChromeSelectionBugPlugin() { 
     var self = this; 
     self.init = function (scope, grid, services) { 
      self.services = services; 
      self.grid = grid; 
      //check if the browser is Chrome (for performance issues) 
      if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { 
      // mousedown event on row selection 
      grid.$viewport.on('mousedown', self.onRowMouseDown); 
     } 
     }; 
     self.onRowMouseDown = function (event) { 
      // Get the closest row element from where we click. 
      var targetRow = $(event.target).closest('.ngRow');   
      if (targetRow) { 
       self.grid.buildColumns(); 
      } 
     }; 
    } 

此修復程序爲我工作!

相關問題