微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – ngGrid 2.0.14行选择不适用于新版Google Chrome和ngAnimate

几天前(2015年5月),谷歌Chrome发布了新版本(43.0.2357.65米).
使用此新版本,ng-grid功能停止工作:

症状:
单击一行时,该行不会突出显示

运行一些测试后,我设法从零重现问题:

>创建一个需要ng-grid 2.0.14和ngAnimate的角度应用程序.
>使用旧的Google Chrome版本,该行正确突出显示.
使用新版Google Chrome,该行不会突出显示(尽管已选中)

我创造了两个掠夺者:

Plunkr 1:没有ngAnimate的App
http://plnkr.co/edit/2pSBX9K0QaeaSihMKnGG?p=preview
选择行时,无论Chrome版本如何,该行都会突出显示

Plunkr 2:带有ngAnimate的应用程序
http://plnkr.co/edit/hyRO4fTwglSCL8KCTgHA?p=preview
选择行时,该行会在旧的Chrome版本中突出显示,但在新的Chrome版本中,这不起作用!

此外,如果您在选择行后使用Chrome Inspector检查Plunkr 2,您可以看到该行确实获得了类.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的项启用动画.是否有类似功能禁用某些项目的动画?

解决方法

试试这个:

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 $超时.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐