Javascript ng在对象上部分重复循环

Javascript ng在对象上部分重复循环,javascript,html,angularjs,angularjs-ng-repeat,Javascript,Html,Angularjs,Angularjs Ng Repeat,我正在开发一个简单的程序(在概念上),但不幸的是。我一直在关注这个问题,谷歌搜索的日子并没有带来任何结果 我试着在一个物体和所有的孩子之间循环。我已经用两个ng repeats完成了这项工作,从理论上讲,这看起来非常可靠,也很简单 以下是我当前的代码: (函数(){ var CHEAT=angular.module('CHEAT',[]); 欺骗控制器('maps',函数($scope){ $scope.search=“”; $scope.range={ “全球”:{ “$”:“M”, “M”

我正在开发一个简单的程序(在概念上),但不幸的是。我一直在关注这个问题,谷歌搜索的日子并没有带来任何结果

我试着在一个物体和所有的孩子之间循环。我已经用两个
ng repeat
s完成了这项工作,从理论上讲,这看起来非常可靠,也很简单

以下是我当前的代码:

(函数(){
var CHEAT=angular.module('CHEAT',[]);
欺骗控制器('maps',函数($scope){
$scope.search=“”;
$scope.range={
“全球”:{
“$”:“M”,
“M”:{
“z”:“q”
}
},
“其他”:{
“S”:{
c:“猫”
}
}
};
$scope.type=功能(obj){
obj的返回类型;
};
});
}());

{{prop}}=
{{key}}:{{test}

我想说的是,问题在于使用“$”作为属性名

另见:

(函数(){
var CHEAT=angular.module('CHEAT',[]);
欺骗控制器('maps',函数($scope){
$scope.search=“”;
$scope.range={
“全球”:{
“testme”:“M”,
“M”:{
“z”:“q”
}
},
“其他”:{
“S”:{
c:“猫”
}
}
};
$scope.type=功能(obj){
obj的返回类型;
};
});
}());

{{prop}}=
{{key}}:{{test}

我想说的是,问题在于使用“$”作为属性名

另见:

(函数(){
var CHEAT=angular.module('CHEAT',[]);
欺骗控制器('maps',函数($scope){
$scope.search=“”;
$scope.range={
“全球”:{
“testme”:“M”,
“M”:{
“z”:“q”
}
},
“其他”:{
“S”:{
c:“猫”
}
}
};
$scope.type=功能(obj){
obj的返回类型;
};
});
}());

{{prop}}=
{{key}}:{{test}

您在Angular中偶然发现了一个gotcha

以美元符号($)开头的键将不会被ng repeat识别($是angular和其他前端库中的保留字符)

链接到(当前似乎是一个不修复):

小提琴示例:

从上面提到的github问题来看,frfancha有一个解决方案:

解决方法很简单:只需在Object.keys(myObject)上重复ng

例如:

$scope.thing = {
    "Globals": {
        "$": "M",
            "M": {
            "z": "q"
        }
    },
        "Other": {
        "S": {
            'c': "cat"
        }
    }
};
$scope.range = Object.keys($scope.thing);

您将处理数组而不是对象,因此ng repeat需要稍微更改。

您在Angular中偶然发现了一个gotcha

以美元符号($)开头的键将不会被ng repeat识别($是angular和其他前端库中的保留字符)

链接到(当前似乎是一个不修复):

小提琴示例:

从上面提到的github问题来看,frfancha有一个解决方案:

解决方法很简单:只需在Object.keys(myObject)上重复ng

例如:

$scope.thing = {
    "Globals": {
        "$": "M",
            "M": {
            "z": "q"
        }
    },
        "Other": {
        "S": {
            'c': "cat"
        }
    }
};
$scope.range = Object.keys($scope.thing);

您将处理一个数组而不是一个对象,因此您的ng repeat需要稍作更改。

问题不是因为存在一个基元值,而是因为存在以
$
开头的属性,这表明它是它的属性。假设您的密钥不是以
$
开头的其他密钥,则可以正常工作

如果无法格式化对象,则只需将对象的键放到数组中,并对其进行迭代即可

比如:

 <div ng-repeat="prop in getKeys(range)" ng-init="value=range[prop]">
    {{prop}} =
    <div ng-repeat="key in getKeys(value)" ng-init="rangeValue=value[key]">
      {{key}}: {{rangeValue}}
    </div>
  </div>
(函数(){
var CHEAT=angular.module('CHEAT',[]);
欺骗控制器('maps',函数($scope){
$scope.search=“”;
$scope.range={
“全球”:{
“$”:“M”,
“A”:“测试”,
“M”:{
“z”:“q”
}
},
“其他”:{
“S”:{
c:“猫”
}
}
};
$scope.getKeys=函数(obj){
返回Object.keys(obj);
}
$scope.type=功能(obj){
obj的返回类型;
};
});
}());

{{prop}}=
{{key}}:{{rangeValue}

问题不是由于存在原语值,而是因为存在以
$
开头的属性,这表明它是它的。假设您的密钥不是以
$
开头的其他密钥,则可以正常工作

如果无法格式化对象,则只需将对象的键放到数组中,并对其进行迭代即可

比如:

 <div ng-repeat="prop in getKeys(range)" ng-init="value=range[prop]">
    {{prop}} =
    <div ng-repeat="key in getKeys(value)" ng-init="rangeValue=value[key]">
      {{key}}: {{rangeValue}}
    </div>
  </div>
(函数(){
var CHEAT=angular.module('CHEAT',[]);
欺骗控制器('maps',函数($scope){
$scope.search=“”;
$scope.range={
“全球”:{
“$”:“M”,
“A”:“测试”,
“M”:{
“z”:“q”
}
},
“其他”:{
“S”:{
c:“猫”
}
}
};
$scope.getKeys=函数(obj){
返回Object.keys(obj);
}
$scope.type=功能(obj){
obj的返回类型;
};
});
}());

{{prop}}=
{{key}}:{{rangeValue}

Ay。不幸的是,我无法改变这一点。有什么可能的解决办法吗?也许你可以用一些讨厌的字符串切片来预处理你的东西,这会很难看。不幸的是,我无法改变这一点。有什么可能的解决办法吗?也许你可以用一些讨厌的字符串切片来预处理你的东西,这会很难看..嗯。我明白了,我来测试一下,然后再回去you@Vɪʜᴀɴ我建议在控制器、服务或其他地方格式化对象。Hm。我明白了,我来测试一下,然后再回去you@Vɪʜᴀɴ我建议在您的控制器、服务或其他地方格式化对象。回到这里,您将如何过滤此对象?因为角度过滤是一个单独的问题,我鼓励您提出一个新问题,以便我们可以为未来的访问者捕获它(除非已经在