当前位置: 首页 > 面试题库 >

无法在angularjs中调用Object.keys

文寒
2023-03-14
问题内容

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

<accordion-group ng=repeat="(cname, stations) in byClient">
    <accordion-heading>
        {{ cname }} <span class="pull-right"> {{ Object.keys(stations).length }} Stations</span>
    </accordion-heading>

当那显示Object.keys(stations).length解析为无。如果我在控制器中拨打相同长度的电话,我将获得预期的计数。有什么阻止方法调用在AngularJS中工作的吗?

使用该手风琴的其余部分的stations行为均符合预期,因此我知道它的填充正确。该byClient数据结构基本上看起来像这样:

{
    "Client Name" : {
        "Station Name": [
            {...},
            {...}
        ]
    }
 }

问题答案:

是的,因为这Object是的一部分,window/global而angular无法根据范围评估该表达式。当您Object.keys在绑定中指定时,angular尝试针对进行评估$scope,但找不到。您可以将object.keysroot
的引用存储在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>

好吧,这对于除隔离范围之外的所有子范围都可用。如果您打算在隔离范围内执行此操作(例如:-隔离范围指令),则需要Object.keys在范围上添加引用,或者在范围内公开将返回长度的方法时。

或者更好的是,创建一个格式过滤器以返回密钥长度并在任何地方使用它。

app.filter('keylength', function(){
  return function(input){
    if(!angular.isObject(input)){
      throw Error("Usage of non-objects with keylength filter!!")
    }
    return Object.keys(input).length;
  }
});

并做:

{{ stations | keylength }}

演示版



 类似资料:
  • 问题内容: 在我的Android应用程序中,我无法使用JDK 1.6中的 String.isEmpty() 函数。Android 2.1 lib在java.lang.String类中没有此功能 我尝试将JRE系统库输入到我的项目中,因为它具有此功能,但是没有效果。 如何解决此问题并允许我的应用程序使用此功能? 问题答案: 如何解决此问题并允许我的应用程序使用此功能? 你不能 使用代替。它一直向下兼

  • 问题内容: 我正在尝试使用Angularjs从USGS地震供稿中收集数据。通常,您需要在URL末尾添加?callback = JSON_CALLBACK以便Angular使用它,但是USGS提要无法识别此选项。 JSON_CALLBACK(例如,http ://earthquake.usgs.gov/earthquakes /feed/v1.0/summary/all_day.geojsonp?c

  • 问题内容: 我想在一个链中进行多个Ajax调用。但我也想在每次通话后按摩数据,然后再进行下一次通话。最后,当 所有 调用成功时,我想运行其他代码。 我正在为我的Ajax调用使用Angular $ http服务,并坚持这一点。 可能吗? 问题答案: 是的,由于AngularJS的服务是围绕PromiseAPI构建的,因此可以非常优雅地对其进行处理。基本上,对方法的调用会返回一个Promise,您可以

  • 你好,我正在开发Angularjs应用程序。我正在尝试调用post方法,但我无法调用post方法。 下面是我的代码。 在请求头,我可以看到请求方法:选项,但我做了POST请求?我能知道我做错了什么吗?如有任何帮助,我们将不胜感激。谢谢.

  • 下面是链接中的Netflix Eureka的Spring云服务发现教程:https://howtodoinjava.com/spring/spring-cloud/spring-cloud-service-discovery-netflix-eureka/. 在源代码中,我简单地使用了version而不是,没有其他更改。 我试着打电话给spring eureka客户端学生服务,使用http://l

  • 问题内容: 这是我的plnkr:http ://plnkr.co/edit/n8cRXwIpHJw3jUpL8PX5?p=preview 您必须单击li元素,然后表格会出现。输入一个随机字符串,然后点击“添加通知”。代替textarea文本,您将得到未定义。 标记: JS部分: 返回“未定义”。我注意到当使用angular-ui的ui-if时,这不起作用。任何想法为什么这不起作用?如何解决? 问题