使用Kendo和angular JS时为什么会有时滞

时间:2014-04-01 12:59:46

标签: angularjs kendo-ui kendo-grid

我是Angular和Kendo的新手,我的情况就像编辑中的按钮必须在查询屏幕中为其他用户消失,它应该仅为查询的所有者显示。

现在它消失了一段时间后说一分钟,为什么会出现这种滞后? 对此有任何帮助对我很有帮助....

在分析中,确定了以下几点: - ng-show中调用的函数不会立即触发,其中ng-show包含在模板中,然后通过为ng-show指定常量值来检查仍然存在触发ng-show的延迟。但是固定样式正常工作示例style = display:none .. - 然后我发现在渲染kendoui网格行模板后没有立即调用angularjs指令,调用angularjs指令有一些延迟

代码:

$scope.showButton = function(userId){
    if($scope.loggedInUserId == userId)
    {
        return true;
    }
    else
    {
        return false;
    }
};


$scope.model.columns = [
                        { field: "name",title:"Name", width: 300},
                        { field: "userId",title:"User Id", width: 100},
                        { field: "lastModified",title:"Last Modified Date", width: 200},
                        { field: "visibility",title:"Visibility", width: 100},
                        { template: "<img title='Edit' src='content/images/glacier/2.0.1/generic/normal/png21/d_040_edit_normal.png' onmouseover=\"this.src='content/images/glacier/2.0.1/generic/active/png21/d_040_edit_active.png'\" onmouseout=\"this.src='content/images/glacier/2.0.1/generic/normal/png21/d_040_edit_normal.png'\"  ng-click='viewQuery(#=id#);disableSave(\"#=userId#\")' alt='Edit'><img title='Make Public' src='content/images/glacier/2.0.1/generic/normal/png21/d_150_team_normal.png' onmouseover=\"this.src='content/images/glacier/2.0.1/generic/active/png21/d_150_team_active.png'\" onmouseout=\"this.src='content/images/glacier/2.0.1/generic/normal/png21/d_150_team_normal.png'\"  ng-click='makePublic(#=id#)' ng-show='showButton(\"#=userId#\")' alt='Public'><img title='Make Private' src='content/images/glacier/2.0.1/generic/normal/png21/d_118_user_normal.png' onmouseover=\"this.src='content/images/glacier/2.0.1/generic/active/png21/d_118_user_active.png'\" onmouseout=\"this.src='content/images/glacier/2.0.1/generic/normal/png21/d_118_user_normal.png'\"  ng-click='makePrivate(#=id#)' ng-show='showButton(\"#=userId#\")' alt='Private'><img title='Delete' src='content/images/glacier/2.0.1/generic/normal/png21/d_030_delete_normal.png' onmouseover=\"this.src='content/images/glacier/2.0.1/generic/active/png21/d_030_delete_active.png'\" onmouseout=\"this.src='content/images/glacier/2.0.1/generic/normal/png21/d_030_delete_normal.png'\"  ng-click='deleteQuery(#=id#)\' ng-show='showButton(\"#=userId#\")' alt='Delete'>", title: "Operations" },                            
                       ];

$scope.model.gridOpts = {
        columns: $scope.model.columns,
        filterable: { extra: false },
        scrollable: true,
        height: "230%",
        pageable: true,
        batch: false,
        reorderable: true,
        sortable: true,
        editable: "inline",

 };

1 个答案:

答案 0 :(得分:1)

如果没有JSFiddle进行分析,就很难确定问题。但我会提供一种可以至少进行调查的可能解决方案。

Angular只能在其后隐藏这些按钮,依赖于它的所有内容已经启动。这意味着下载角度代码,等待加载其他所有内容,解析HTML,解析任何数据依赖关系等等。此时它将对DOM进行修改(当你的按钮隐藏时)。

有几种方法可以解决这个问题,使用ng-cloak,在屏幕上没有显示任何内容,直到它被适当修改,或者隐藏所有可选控件并显示用户之后可以访问的内容角载荷。

这是我刚刚在项目中使用的一个选项。在您的条目文件的顶部添加此代码(如index.html,default.html,等等):

    .ng-hide {
        display: none !important;
    }

现在将ng-hide类应用于您不想显示的任何按钮,直到您知道他们有权访问这些按钮。

将它放在默认文件的顶部,它根本不会显示,直到它被告知。如果将它放在.css文件中,那么它有时会短暂显示,直到加载,解析和应用.css文件为止。

另一个选择是查看ng-cloak。您可以在此处试用:http://plnkr.co/edit/?p=preview

我相信你说过它超过60秒的事实让我相信它可能正在等待所需的数据才能获得resolved才能分析权限。

如果你不了解resolve语句在路由中的工作原理,你可以在这里阅读: http://www.undefinednull.com/2014/02/17/resolve-in-angularjs-routes-explained-as-story/

我不确定这是否能解决您的问题,但是一旦您可以创建一个jsfiddle,那么您将有更多人跳进去回答这个问题。