Javascript 无法在angularjs中调用Object.keys

Javascript 无法在angularjs中调用Object.keys,javascript,angularjs,angular-ui-bootstrap,Javascript,Angularjs,Angular Ui Bootstrap,我使用的是UI.Bootstrap手风琴,我的标题定义如下: {{cname}}{{Object.key(stations.length}}站 当显示对象时,key(stations).length解析为空。如果我将相同长度的调用放入控制器,我将返回预期的计数。是否有什么东西阻止方法调用在AngularJS中工作 手风琴的其余部分使用电台的操作与预期一致,因此我知道它被正确填充。byClient数据结构基本上如下所示: { “客户名称”:{ “站名”:[ {...}, {...} ] } }

我使用的是UI.Bootstrap手风琴,我的标题定义如下:


{{cname}}{{Object.key(stations.length}}站
当显示
对象时,key(stations).length
解析为空。如果我将相同长度的调用放入控制器,我将返回预期的计数。是否有什么东西阻止方法调用在AngularJS中工作

手风琴的其余部分使用
电台
的操作与预期一致,因此我知道它被正确填充。
byClient
数据结构基本上如下所示:

{
“客户名称”:{
“站名”:[
{...},
{...}
]
}
}

是,这是因为
对象
窗口/全局
的一部分,angular无法根据范围计算该表达式。当您在绑定中指定
Object.keys
时,将尝试根据
$scope
对其求值,但未找到它。您可以将
object.keys
的引用存储在rootScope中的某个实用程序中,并在应用程序中的任何位置使用它

大概是这样的:-

angular.module('yourApp',[deps...]).run(function($rootScope){
  //Just add a reference to some utility methods in rootscope.
  $rootScope.Utils = {
     keys : Object.keys
  }

  //If you want utility method to be accessed in the isolated Scope 
  //then you would add the method directly to the prototype of rootScope 
  //constructor as shown below in a rough implementation.

  //$rootScope.constructor.prototype.getKeys = Object.keys;

});
并将其用作:-

<span class="pull-right"> {{ Utils.keys(stations).length }} Stations</span>
并且做:-

{{ stations | keylength }}

使用该函数确定对象属性的数量:

$scope.keyLength = function (obj) {
    return Object.keys(obj).length;
}
和使用:

{{ keyLength(myObj) }}

我认为过滤器是处理模板代码中结构的最有角度的方式:

angular.module('app.filters').filter('objectKeysLength', [function() {
    return function(items) {
        return Object.keys(items).length;
    };
}]);

angular.module('app.filters').filter('objectKeys', [function() {
    return function(item) {
        if (!item) return null;
        var keys = Object.keys(item);
        keys.sort();
        return keys;
    };
}]);

以防有人搜索角度2和更高的解。现在它是一个帽子管,可以用来在对象上交互

在AngularJS 1.6中,我找不到任何其他答案。什么对我有用
使用
$window
访问
Object.keys
像这样
$window.Object.keys({'a':1,'b':2})

就像我会说的那样非常好。你已经给出了两个完美的解决方案!谢谢:)如果您使用的是隔离作用域,那么您需要使用
{{$root.Utils.keys(stations.length}}
@AJRichardson这是您在这里提出的一个非常好的观点。您可以做的不是将其添加到rootScope实例中,而是将其添加到原型中。i、 e
$rootScope.constructor.prototype.getKeys=Object.keys
。然后,它也应该在隔离范围内可用。类似于我所做的,为什么这个在默认情况下不存在于Angular中,是如此有用!尝试
{(站|键).length}}站
angular.module('app.filters').filter('objectKeysLength', [function() {
    return function(items) {
        return Object.keys(items).length;
    };
}]);

angular.module('app.filters').filter('objectKeys', [function() {
    return function(item) {
        if (!item) return null;
        var keys = Object.keys(item);
        keys.sort();
        return keys;
    };
}]);