如何在Angular谓词中使用保留字符?

时间:2015-05-12 17:00:34

标签: javascript angularjs

我在我的应用中使用Google Analytics中的一些数据,该数据在散列键中使用冒号。例如,

var pages = [{
    'ga:sessions': 100,
    'ga:adImpressions': 1000
}, ...];

但是当我想用冒号来命令时,Angular遇到问题。这样:

<div ng-repeat="page in pages | orderBy:'ga:sessions':true">

抛出这个:

Error: [$parse:syntax] Syntax Error: Token ':' is an unexpected
token at column 3 of the expression [ga:sessions] starting at
[:sessions].
编辑:这是我已经尝试过的事情:

  1. 将密钥存储在var中并使用orderBy:myKey:true
  2. 使用\
  3. 转义冒号
  4. 在绝望的行为中,使用冒号的unicode转义码

3 个答案:

答案 0 :(得分:2)

使用一个函数,该函数将返回数组中每个对象的特定键的值:

$scope.filterFunc = function (obj){
    return obj['ga:sessions'];
}

在HTML中:

<div ng-repeat="page in pages | orderBy:filterFunc:true">

另见this SO post

答案 1 :(得分:0)

你不能这样使用它,因为角度解析器不允许你。

您可以在将它们转换为对象之前编写自己的过滤器或修复键。

UPD:从技术上讲,根据ECMAScript 5.1 https://es5.github.io/#x7.6

,它不是有效的属性名称

答案 2 :(得分:0)

我很确定逃避角色应该有效,我找到了一个jsfiddle,他们在冒号前面使用转义字符()作为例子

http://jsfiddle.net/CBgcP/664/

 <li ng-repeat="friend in friends | weDontLike:'Adam\:Adamson'">

编辑:我看到你已经尝试了这个但它似乎在jsfiddle中工作。我会看看我是否找不到另一种解决方案。