0

我在 index.html 中的 div 上有一个 ng-show,它根据用户许可确定要显示的标题。这些许可作为许可对象数组存储在 $scope.user.clearance 中。$scope.user.clearance 的结构如下:

[
    {
       'clearance':string
    }
]

导致解析错误的指令是:

<div ng-show = "user.clearance &&
        user.clearance.filter(function(e) { return e['clearance'] === 'SUPERADMIN'; }).length > 0" 
        ng-include="'/partials/components/superadmin-header.html'">
</div>

表达方式:

user.clearance && user.clearance.filter(function(e) { 
     return e['clearance'] === 'SUPERADMIN'; 
}).length > 0

在 jsfiddle 中工作得很好:http: //jsfiddle.net/6frqzwee/2/

知道为什么 Angular 对此有困难吗?

4

1 回答 1

1

因为ng-show指令放在$watchexpression提供的ng-show属性上。如果您将表达式作为 传递string,它会在当前范围内评估它们,但是当您传递带有属性的函数时会引发$parse错误。

更好地让它工作,你可以有角度过滤器|,它会给你预期的结果,并且在解析 HTML 时不会抛出任何错误

<div ng-show ="user.clearance &&
    (user.clearance | filter: {clearance: 'SUPERADMIN' }).length > 0" 
    ng-include="'/partials/components/superadmin-header.html'">

如上面的语法(user.clearance | filter: {clearance: 'SUPERADMIN' })将使用范围进行评估,它将返回匹配元素的数组,该数组的clearance属性值为SUPERADMIN.

于 2015-10-12T21:39:40.280 回答