代码之家  ›  专栏  ›  技术社区  ›  Komo

ui-grid:指令作为cellTemplate

  •  4
  • Komo  · 技术社区  · 9 年前

    我使用的是具有以下数据结构的ui网格:

    {
     name: String,
     tags: [{label: String, image: String}] 
    }
    

    因此,网格将有两列:名称和标记。一个行条目可以有多个与其关联的标记(因此是Array)。 每个标记都有两个属性:标签和图像,这是图像文件的路径。

    我创建了一个显示标签的指令(例如directionalTags):

    为了简单起见:

    <div>{{tag.label}}<img ng-src={{tag.image}}></div>
    

    如何在gridOptions的cellTemplate属性中使用此指令? 我的想法是:

    columnDefs: [
                { field: 'name'},
                { field: 'tags',
                  cellTemplate : "<div ng-repeat="tag in tags"><directive-tags></directive-tags></div>"
                },
    

    非常感谢您的帮助。

    1 回复  |  直到 9 年前
        1
  •  4
  •   galaxyAbstractor    9 年前

    正在检查文档 custom row templates 我们可以看到 row 对象可以从行模板访问,例如: grid.appScope.fnOne(row) 。遵循示例并尝试运行此操作 一行 对象被记录到控制台。 一行 包含 entity 键,这是存储行数据的位置。

    你很接近你的例子,你只需要替换 tag in tags 具有 tag in row.entity.tags 并将指令重命名为不包含破折号(因为我之前没有处理过指令,而且正在喝第一杯咖啡,所以我也有一段时间陷入了这种状态,指令名称中的破折号无法解析)。

    这是一个双关语: http://plnkr.co/edit/P1o1GolyZ5wrKCoXLLnn?p=preview

    var testApp = angular.module('testApp', ['ui.grid']);
    
    testApp.directive('directivetags', function() {
      return {
            restrict: 'E',
            template: '<div>{{tag.label}}<img ng-src={{tag.image}}></div>',
            replace: true
        }
    });
    
    testApp.controller('TestCtrl', function($scope) {
    
      $scope.grid = {
        rowHeight: 50,
        data: [{
          name: 'Test',
          tags: [{
            label: 'Suwako Moriya',
            image: 'http://i.imgur.com/945LPEw.png'
          }]
        }],
        columnDefs: [
              { field: 'name'},
              { field: 'tags',
                cellTemplate: '<div style="height: 50px" ng-repeat="tag in row.entity.tags"><directivetags></directivetags></div>'
              }
        ]};
    });