使用自定义指令对重复大不同数据的更好方法是什么?

时间:2015-08-11 19:21:49

标签: angularjs

我正在学习Angular并尝试使用自定义指令创建包含来自我的git存储库的数据的大表。但我不知道如何实现它,因为不同导师和书籍中的示例通常很简单,但我从$ http收到的对象非常大,并且嵌套对象。这是我的回购: https://api.github.com/users/jotunnjs/repos

我在做什么:

  1. 从工厂获取数据。我有一个包含数据的数组。它' S 好。
  2. 我创建自定义指令并在本地获取我的数组数据 范围(scope: {data: "="})。
  3. 比我有问题。我用     " templateUrl"我在哪里创建一个表。我当然认为那样做     这样的事情并不正常:

      <table>
          <thead>
              <tr>
                  <td>ID</td>
                  <td>Name</td>
                  <td>...</td>
                   // here would be a lot of tag and it's difficult to maintain
              </tr>
          </thead>
              <tbody>
                  <tr ng-repeat="item in data">
                      <td>{{item.id}}</td>
                      <td>{{item.name}}</td>
                      <td>{{item...}}</td>
                  </tr>
              </tbody>
        </table>
    
  4. Couse它将成为标签的looooot

    我几乎可以肯定我需要这样做:

    <table>
        <thead>
            <tr ng-repeat="(key, val) in item in data">
                <td>{{key}}</td>
            </tr>
        </thead>
            <tbody>
                <tr ng-repeat="item in data">
                    <td ng-repeat="i in item">{{i}}</td>
                </tr>
            </tbody>
    </table>
    

    但是我如何设置<td>中的日期类型?因为在列表中,您可以找到类型,例如链接,图像,电子邮件和字符串。另外我如何处理嵌套对象?

    P.S。我知道这个问题很大而且很难,但是如果有人能帮我理解这种情况那就太棒了!请提供一些我可以阅读的例子或材料。感谢

1 个答案:

答案 0 :(得分:0)

我可以想到两个解决方案,第一个是将数据类型作为值的一部分。因此,每个属性都包含一个复杂的对象,类似于{value:&#34; realValue&#34;,type:&#34; stringOrTypeOfYourValue&#34;}。然后,您可以根据其类型修改您的值。

<tr ng-repeat="item in data">
        <td ng-repeat="i in item">
             <span ng-show="i.type === Date"> {{i.value |date:"dd/MM/yyyy"}}</span>
             <span ng-show="i.type !== Date"> {{i.value}}</span>
         </td>
</tr>

另一种解决方案是创建一个通用过滤器,并尝试了解过滤器中值的类型,并根据您的类型应用相应的过滤器。例如:

yourApp.filter('formatValue', [function () {
    return function (value, dateFormat) {
      if (value instanceof Date) {
        return $filter("date")(value, dateFormat);
      } //You may add other conditions to handle such as formatting numbers etc.
      else {
        return value;
      }
    };
  }])