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 仅当对象类型为数组时,如何使用ng repeat?_Javascript_Angularjs_Arrays - Fatal编程技术网

Javascript 仅当对象类型为数组时,如何使用ng repeat?

Javascript 仅当对象类型为数组时,如何使用ng repeat?,javascript,angularjs,arrays,Javascript,Angularjs,Arrays,我有一个复杂的对象,如下所示: $scope.document = { "GENERAL_FIELDS": { "Source_Type": "custom", "Annotations": [ "216/content/Factiva_CM_001/Proteins", "216/content/Factiva_CM_001/Fact" ], "Content": [ " Baculovirus; Budded v

我有一个复杂的对象,如下所示:

$scope.document = 
 {
  "GENERAL_FIELDS": {
    "Source_Type": "custom",
    "Annotations": [
      "216/content/Factiva_CM_001/Proteins",
      "216/content/Factiva_CM_001/Fact"
    ],
    "Content": [
      "   Baculovirus; Budded virus; Ultrastructure; Cryo-EM;"
    ],
    "Title": [
      "Budded baculovirus particle structure revisited"
    ]
  },
  "stn": {
    "Document_Type": [
      "Journal",
      "Article"
    ]
  }
}
我想显示“常规字段”和“stn”中的所有字段。字段的值可以是字符串或字符串数组。如果它是数组,我还想在它上面重复并显示内容。以下是我的html:

<div id="titsec" class="comdocdet"  ng-repeat="(category, group) in document">
   <div ng-repeat="(key, value) in group">
      <div class="pTitle">
         {{key}}
      </div>
      <div class="contdesc">
         <div ng-if="Array.isArray(value)">
            <div ng-repeat="v in value">
               {{v}}
            </div>
         </div>
         <div ng-if="!Array.isArray(value)">
            {{value}}
         </div>
      </div>
   </div>
</div>

{{key}}
{{v}
{{value}}

但是
ng if=“Array.isArray(value)”
永远不会为真,数组字段以对象形式显示:
[“Journal”,“Article”]
。我遗漏了什么?

不应该直接在模板中访问数组对象上的方法,而应该在控制器中执行。例如:

<div ng-if="vm.isValueAnArray(value)">
  // Some html
</div>

我还没有测试它,但是逻辑应该在控制器中,而不是在模板中。

您应该在控制器中执行操作,而不是直接在模板中访问数组对象上的方法。例如:

<div ng-if="vm.isValueAnArray(value)">
  // Some html
</div>
我还没有测试它,但是逻辑应该在控制器中,而不是在模板中。

这是一个范围问题 模板的范围与控制器中的
$scope
相关,因此当它查找数组时,将在控制器范围中查找该数组(例如
$scope.Array

一个选项是使用
ng if=“window.Array.isArray(value)”
。请参见下面的工作示例

另一个选项是在控制器中设置
$scope.Array=Array.prototype
。这样,在调用
Array.isArray()
之前就不需要引用
窗口

另一个选项是在控制器作用域中为创建别名:

$scope.isValueAnArray=Array.isArray

然后调用该函数以确定该值是否为数组

angular.module('ang',[])
.controller('cont',函数($scope){
//使用此选项可避免引用模板中的窗口
//$scope.Array=Array.prototype;
$scope.document={
“常规字段”:{
“源类型”:“自定义”,
“注释”:[
“216/content/Factiva_CM_001/Proteins”,
“216/内容/事实/事实”
],
“内容”:[
杆状病毒;出芽病毒;超微结构;冷冻电镜
],
“标题”:[
“芽接杆状病毒粒子结构再探讨”
]
},
“stn”:{
“文档类型”:[
“日记”,
“文章”
]
}
}
});

{{key}}
{{v}
{{value}}
这是一个范围界定问题 模板的范围与控制器中的
$scope
相关,因此当它查找数组时,将在控制器范围中查找该数组(例如
$scope.Array

一个选项是使用
ng if=“window.Array.isArray(value)”
。请参见下面的工作示例

另一个选项是在控制器中设置
$scope.Array=Array.prototype
。这样,在调用
Array.isArray()
之前就不需要引用
窗口

另一个选项是在控制器作用域中为创建别名:

$scope.isValueAnArray=Array.isArray

然后调用该函数以确定该值是否为数组

angular.module('ang',[])
.controller('cont',函数($scope){
//使用此选项可避免引用模板中的窗口
//$scope.Array=Array.prototype;
$scope.document={
“常规字段”:{
“源类型”:“自定义”,
“注释”:[
“216/content/Factiva_CM_001/Proteins”,
“216/内容/事实/事实”
],
“内容”:[
杆状病毒;出芽病毒;超微结构;冷冻电镜
],
“标题”:[
“芽接杆状病毒粒子结构再探讨”
]
},
“stn”:{
“文档类型”:[
“日记”,
“文章”
]
}
}
});

{{key}}
{{v}
{{value}}

或将其添加到控制器中,并保持其余部分不变

 $scope.isArray = angular.isArray;
html将如下所示:

<div ng-if="isArray(value)">
  <div ng-repeat="v in value">
    {{v}}
  </div>
</div>
<div ng-if="!isArray(value)">
            {{value}}
</div>

{{v}
{{value}}

或将其添加到控制器中,并保持其余部分不变

 $scope.isArray = angular.isArray;
html将如下所示:

<div ng-if="isArray(value)">
  <div ng-repeat="v in value">
    {{v}}
  </div>
</div>
<div ng-if="!isArray(value)">
            {{value}}
</div>

{{v}
{{value}}

value.length--将给出字符串的长度以及value.length--我也会给出绳子的长度谢谢伙计!这是我的工作。但为什么它不能从模板中工作?@ManojSuthar在我更新的回答中看到解释谢谢伙计!这是我的工作。但是为什么它不能从模板中工作呢?@ManojSuthar在我更新的答案中看到了解释