Javascript 无法在angularjs中调用Object.keys
我使用的是UI.Bootstrap手风琴,我的标题定义如下: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数据结构基本上如下所示: { “客户名称”:{ “站名”:[ {...}, {...} ] } }
{{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;
};
}]);