Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 柔性工作台_Javascript_Json_Angularjs - Fatal编程技术网

Javascript 柔性工作台

Javascript 柔性工作台,javascript,json,angularjs,Javascript,Json,Angularjs,以下是可能的吗?如果可能的话,我如何更改我的HTML以允许它 <div tasty-table bind-resource="resource"> <table class="table table-striped table-condensed"> <thead tasty-thead></thead> <tbody> <tr ng-repeat="row in rows"&g

以下是可能的吗?如果可能的话,我如何更改我的HTML以允许它

  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>
我有以下模型

prospect = [{"name":"jamie",
             "phones": [{
                         "type":"home",
                         "number":"01275"},
                        {
                         "type":"mobile",
                         "number":"0788"}]},
            {"name":"peter",
             "phones": [{
                         "type":"mobile",
                         "number":"07852"}]}
           ]
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>
我想在angularjs表格中显示如下

name  home  mobile
jamie 01275 0788
peter       07852
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>
我当前的HTML

<table>
        <tbody ng-repeat='person in prospect'>
        <th>Name</th>
        <th ng-repeat="phone in person.phones">{{phone.type}}</th>
        <tr>
        <td>
        {{person.name}}
        </td>
            <td ng-repeat='phone in person.phones'>
                {{phone.number}}
            </td>
        </tr>
        </tbody>
    </table>
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>

要在html中实现这一点,在不修改json的情况下,我首先在每列中添加一个数组,指示手机的类型:

$scope.types= ["home","mobile"];
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>
然后在标题中使用它:

<th ng-repeat="type in types">{{type}}</th>
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>

  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>

另一种方法是使用自定义指令替换嵌套的
ngRepeat
s,该指令显示给定列和行的正确电话。

我希望您会喜欢此解决方案:)

  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>
我帮你解决了这个问题

bower install angular
bower install ng-tasty
bower install bootstrap
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>
这里是完整的解决方案

  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>

angular.module('stackOverflowAnswer',['ngTasty']))
.filter('filterTypeColumn',函数(){
返回函数(输入,类型列){
var电话号码;
input.forEach(功能(电话){
if(phone.type==typeColumn){
phoneNumber=phone.number;
}
})
返回电话号码;
};
})
.controller('StackOverflowController',函数($scope){
$scope.resource={
“标题”:[
{“名称”:“名称”},
{“家”:“家”},
{“移动”:“移动”}
],
“行”:[
{ 
“姓名”:“杰米”,
“电话”:[
{“类型”:“主页”,“编号”:“01275”},
{“类型”:“手机”,“号码”:“0788”}
]
},
{
“姓名”:“彼得”,
“电话”:[
{“类型”:“手机”,“号码”:“07852”}
]
}
]
};
});
如果你想了解更多关于ngTasty的信息,你可以在这里找到所有的文档。 对于您的特定情况,解决方案是制作自定义过滤器

  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>

Ciao

这种方法的问题是,对于第二个条目,peter没有“家”号。“手机”号码出现在“家庭”标题下。此解决方案中存在问题。第二个人的手机号码显示在“家”栏中。@KayakDave我同意你的解决方案。我认为JSON结构不允许用其他方式来处理这个问题。模型是固定的吗?我的意思是,电话类型是否会是家用和移动电话,或者你必须考虑多种电话类型以及同一类型的多个号码?目前的模式是每人最多有一个家用电话号码和一个移动电话号码。但是,如果可能的话,我希望保留多类型和多个数字的灵活性。
  <div tasty-table bind-resource="resource">
    <table class="table table-striped table-condensed">
      <thead tasty-thead></thead>
      <tbody>
        <tr ng-repeat="row in rows">
          <td ng-bind="row.name"></td>
          <td ng-bind="row.phones | filterTypeColumn:'home'"></td>
          <td ng-bind="row.phones | filterTypeColumn:'mobile'"></td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="bower_components/angular/angular.min.js"></script>
  <script src="bower_components/ng-tasty/ng-tasty-tpls.min.js"></script>
  <script>
    angular.module('stackOverflowAnswer', ['ngTasty'])
    .filter('filterTypeColumn', function() {
      return function (input, typeColumn) {
        var phoneNumber;
        input.forEach(function (phone) {
          if (phone.type === typeColumn) {
            phoneNumber = phone.number;
          }
        })
        return phoneNumber;
      };
    })
    .controller('StackOverflowController', function ($scope) {
      $scope.resource = {
        "header": [
          { "name": "Name" },
          { "home": "Home" },
          { "mobile": "Mobile" }
        ],
        "rows": [
          { 
            "name":"jamie",
            "phones": [
              { "type":"home","number":"01275" },
              { "type":"mobile", "number":"0788"}
            ]
          },
          {
            "name":"peter",
            "phones": [
              { "type":"mobile","number":"07852"}
            ]
          }
        ]
      };
    });
  </script>
</body>
</html>