Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 Angular.JS ng重复拆分字符串_Javascript_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

Javascript Angular.JS ng重复拆分字符串

Javascript Angular.JS ng重复拆分字符串,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我是Angular.JS的新手,正在尝试找出如何正确实现ng repeat 我的作用域中有一个数据对象,它是从数据库中的JSON生成的。返回的“字段”有时可以是单个字符串,也可以是数组 例如: Email Address = "me@test.com" or Email Address = ["me1@test.com", "me2@test.com", "me3@test.com"] 我只想在一系列的跨度显示任何电子邮件地址将包含。到目前为止,我已经做到了: <span ng-repe

我是Angular.JS的新手,正在尝试找出如何正确实现ng repeat

我的作用域中有一个数据对象,它是从数据库中的JSON生成的。返回的“字段”有时可以是单个字符串,也可以是数组

例如:

Email Address = "me@test.com" or
Email Address = ["me1@test.com", "me2@test.com", "me3@test.com"]
我只想在一系列的跨度显示任何电子邮件地址将包含。到目前为止,我已经做到了:

<span ng-repeat="EMAIL_ADDRESS in data.EMAIL_ADDRESS">
    <span>{{EMAIL_ADDRESS}}</span><br />
</span

{{电子邮件地址}}

角度方法是在收到数据后格式化数据。如果值是字符串,则将其替换为包含该值的数组。这样,模板将收到一致的结果,控制器逻辑将处理一致的数据结构

编辑:我也不会直接将原始返回数据从服务器绑定到$scope。我喜欢在服务器和客户机的数据名称/类型之间添加一个级别的分离,以确保将来易于更改并且没有强耦合

JS

$http.get('/my/data').success(function(data) {
  //here's where I'd do all the data transformation and binding
  if(angular.isArray(data.EMAIL_ADDRESS)) {
    $scope.emailAddresses = data.EMAIL_ADDRESS;
  else {
    $scope.emailAddresses = [data.EMAIL_ADDRESS];
  }
});
<span ng-repeat="emailAddress in emailAddresses">
HTML

$http.get('/my/data').success(function(data) {
  //here's where I'd do all the data transformation and binding
  if(angular.isArray(data.EMAIL_ADDRESS)) {
    $scope.emailAddresses = data.EMAIL_ADDRESS;
  else {
    $scope.emailAddresses = [data.EMAIL_ADDRESS];
  }
});
<span ng-repeat="emailAddress in emailAddresses">


这样,您的模板就不会绑定到服务器api返回值/属性,您可以使用单独的跨距/文档来显示不同的情况:使用ngRepeat表示数组,而不使用ngRepeat表示简单字符串

太好了

<div ng-show="isString(data.EMAIL_ADDRESS)">{{data.EMAIL_ADDRESS}}<div><div ng-hide="isString(data.EMAIL_ADDRESS)" ng-repeat="address in data.EMAIL_ADDRESS">{{address}}<div>
{{data.EMAIL{u ADDRESS}}{{ADDRESS}

从服务器获取数据时:

EMAIL_ADDRESS = EMAIL_ADDRESS instanceof Array ? EMAIL_ADDRESS : [EMAIL_ADDRESS]

如果无法更改数据库中返回的对象,或者必须对多个变量执行此操作,则可以实现一个函数,将字符串转换为数组,这将阻止ng REPECT对其进行解析

一个可能的功能可以直接在控制器中实现:

$scope.formatData=function(objectFromDB){
    if(!angular.isArray(objectFromDB))
       return [objectFromDB];
    else
       return objectFromDB;
    }
然后,您只需使用数据调用函数

<span ng-repeat="EMAIL_ADDRESS in formatData(data.EMAIL_ADDRESS)">

易于实施,工作起来很有魅力。我觉得,考虑到它的可移植性和干净的方法,这个答案是最好的。谢谢