0

此 Plunker说明了在评估以下内容期间出现“Token 'undefined' not a primary expression”错误(在控制台上可见):

<div ng-repeat="auimodelField in uimodel.fields" ng-show="!auimodelField.showOnlyIf || {{auimodelField.showOnlyIf}}">

我的想法/希望是,如果没有 auimodelField.showOnlyIf(未定义),它不会继续评估,因为我期望 AngularJS 表达式评估服务有一些惰性,但显然,在这种情况下,这不起作用。

有针对这个的解决方法吗?(一个可能的“解决方法”是在模型中总是有一个 showOnlyIf ,就像在这个 Plunker中一样,当然;但这有点可惜。)

提交关于此问题的错误/增强请求 GitHub 问题是否值得?

4

1 回答 1

4

ng-show混合的表达和插值对我来说似乎很可疑;我可能会更明确一点:

<div ng-repeat="auimodelField in uimodel.fields"
  ng-show="shouldShow(auimodelField.showOnlyIf)">
$scope.shouldShow = function(expr) {
  return !expr || $scope.$eval(expr);
};

示例:http ://plnkr.co/edit/Zxx9kW?p=preview

[更新]

我确实遇到了这个 GitHub 问题:https ://github.com/angular/angular.js/issues/433但我相信您的问题是插值首先发生,并且解析器将其识别为无效表达式(之前it 事件尝试运行它)。

在这种情况下,这应该(并且确实)解决了这个问题:

<div ng-repeat="auimodelField in uimodel.fields"
  ng-show="!auimodelField.showOnlyIf || {{auimodelField.showOnlyIf || false}}">
于 2013-07-27T19:28:53.910 回答