【问题标题】:Angularjs: custom grid component, dynamically add <br> elementsAngularjs:自定义网格组件,动态添加 <br> 元素
【发布时间】:2013-07-02 14:12:01
【问题描述】:

好的,我已经制作了一个非常简单的网格组件。我获取一个列计数属性并在一行结束后添加一个&lt;br&gt; 标记。我在链接函数中这样做。

她是指令:http://pastebin.com/U4ckuKJw
grid.html 看起来像这样:&lt;div class="grid" data-ng-transclude=""&gt;&lt;/div&gt;

在我的第一个示例中,我在网格组件中有 7 个&lt;div&gt; 标签,并且希望有 3 列。所以每隔三分之一 &lt;div&gt; 我想添加一个 &lt;br&gt;

它看起来像这样并且正在工作:
&lt;div data-grid="" data-cols="5"&gt;
&lt;div&gt;1&lt;/div&gt;
&lt;div&gt;2&lt;/div&gt;
&lt;div&gt;3&lt;/div&gt;
&lt;div&gt;4&lt;/div&gt;
&lt;div&gt;5&lt;/div&gt;
&lt;div&gt;6&lt;/div&gt;
&lt;div&gt;7&lt;/div&gt;
&lt;/div&gt;


这个不工作:http://pastebin.com/wtcgM2Hv

我认为这是因为指令 ng-repeat 并且网格组件的内容在执行链接功能时没有呈现。

关于如何解决这个问题或如何优化组件有什么想法吗?

【问题讨论】:

    标签: angularjs grid angularjs-directive custom-component dom-manipulation


    【解决方案1】:

    好的,现在我找到了解决方案:
    use angular directive to change classes of ng-repeat elements

    我现在将它与 Marks 的想法混合并操作 css 类。

    谢谢

    【讨论】:

      【解决方案2】:

      更简单的方法可能是使用标准角度指令和 css 来解决问题。例如,如果您将单元格和 clear: left 浮动到开始新行的单元格上,则可以使用 ng-repeatng-class 来完成此操作。

      我创建了一个示例:http://jsbin.com/idukaz/1

      html 看起来像这样。注意我使用ng-class 来应用格式化需要根据调用自定义columnEnd 函数的结果开始新行的单元格的类。 columnBreak 是您想要的列数的范围变量。 $indexng-repeat生成的变量:

      <div class="table">
          <div class="label" 
               ng-class="{'new-row': startNewRow($index, columnBreak) }"
               ng-repeat="item in items">{{ item.name }} ({{ $index + 1 }})</div>
      </div>
      

      在您的控制器中:

      app.controller('Controller', ['$scope', function (scope) {
          // list of grid data
          scope.items = [];
      
          // controls the number of columns
          scope.columnBreak = 5;
      
          // calculates if current cell is start of new row
          scope.startNewRow = function (index, count) {
              return ((index) % count) === 0;
          };
      }]);
      

      在您的 CSS 中,如果您浮动单元格并清除左侧,您的列将动态显示 更改 columnBreak 值时重新格式化。

      .label {
          float: left;
      
      }
      
      .new-row {
          clear: left;
      }
      

      【讨论】:

      • 这绝对是一种更好的方法。但我想对用户隐藏 ng-class 指令。该指令应为此负责。关于如何实现这一点的任何想法?
      • 我不确定通过尝试隐藏 ng-class 指令会获得什么,但这里有一个包含在自定义指令中的相同内容的示例:jsbin.com/ikobig/2 唯一真正的区别是行长度被馈送到指令中,类似于您在问题中的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多