2015-05-14 4 views
2

Я определяю ui-сетку для отображения данных, и я определяю шаблон ячейки, чтобы установить стиль столбца. В то же время я также создаю директиву, здесь я просто добавляю ее в шаблон ячейки. Но время выполнения функции связи меньше ожиданий.настраиваемая директива в шаблоне ячейки в ui-grid angularjs

Вот все это на plunker: LINK

var app = angular.module("app", ['ui.grid']); 

app.controller("dataCtrl", function ($scope, $element, $attrs) { 
var vm = this; 
vm.gridOptions = { 
    data: "ctrl.dataList", 
    columnDefs: [ 
       { 
        name: "ID", 
        displayName: "User ID", 
        width: 200 
       }, 
       { 
        name: "Name", displayName: "User Name", 
        cellTemplate: "<div class=\"ui-grid-cell-contents\" pop-tip><span style=\"margin-left:5px\">{{row.entity[\"Name\"]}}</span></div>" 
       } 
    ], 
    enableRowSelection: true, 
    enableRowHeaderSelection: false, 
    multiSelect: false, 
    noUnselect: true, 
}; 

vm.dataList = []; 
vm.loadData = function() { 

    for (var i = 1; i <= 100; i++) { 
     var user = {}; 
     user.ID = i; 
     user.Name = 'user ' + i; 
     vm.dataList.push(user); 
    } 
} 

vm.loadData(); 
}); 

app.directive("popTip", function ($compile) { 
return { 
    restrict: 'A', 
    scope: false, 
    link: function ($scope, $element, $attrs) { 
     console.log($scope.row.entity.Name); 
    } 
}; 
}) 

Вы можете получить журнал браузера для просмотра времени выполнения соединения.

В результате, когда количество данных велико, что появляется вертикальная прокрутка, когда мы перетаскиваем полосу прокрутки, пользовательская директива больше не будет выполнять функцию связи.

ответ

3

Вполне вероятно, что есть некоторая оптимизация, встроенная в ui-сетку, посредством чего они повторно используют уже связанные элементы строки, а не связывают новые.

Вы можете проверять, что (и, он должен получить вам то, что вам нужно) по $watch -ную изменения в объеме:

link: function ($scope, $element, $attrs) { 
    //console.log($scope.row.entity.Name); 
    $scope.$watch("row.entity.Name", function(v){ 
     console.log(v); 
    }); 
} 

Это будет отображать все строки при прокрутке.

Demo

+0

Спасибо, это сделать sense.Actually мне нужен другой атрибут, чтобы получить объект строки объекта. как $ scope.dataSource = $ scope. $ eval ($ attrs.source), тогда мне нужны выходные данные в соответствии с $ scope.dataSource. Но результат также начинается. Я обновил плункер. plnkr.co/edit/y36frn9gYMGJEy1hJU7f?p=preview – RonSmith

+0

@RonSmith, вы спрашиваете что-то или просто замечаете - я не был уверен –

+0

Мне жаль, что я не описал ясно. Чтобы повторно использовать настраиваемую директиву, я хочу получить объект привязки в соответствии с другим атрибутом, а затем использовать $ scope. $ Eval, чтобы получить его. Но, как и в этом случае, результат начинается, я обновляю plunker http://plnkr.co/edit/y36frn9gYMGJEy1hJU7f?p=preview – RonSmith

Смежные вопросы