This Plunker在评估期间说明了“令牌未定义'而不是主要表达式”错误(在控制台上可见):
<div ng-repeat="auimodelField in uimodel.fields" ng-show="!auimodelField.showOnlyIf || {{auimodelField.showOnlyIf}}">
我的想法/希望是,如果没有auimodelField.showOnlyIf(未定义),它将不会继续评估,因为我期望AngularJS表达式评估服务有一些懒惰,但显然,在这种情况下,这不起作用
有解决方案吗? (一种可能的“解决方法”是在模型中总是有一个showOnlyIf,当然在this Plunker中;但这是一种耻辱。)
提交有关此问题的错误/增强请求GitHub是否值得?
答案 0 :(得分: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但我相信你的问题是插值首先发生,并且解析器将其识别为无效表达式(在事件尝试运行之前)。 / p>
在这种情况下,这应该(并确实)解决问题:
<div ng-repeat="auimodelField in uimodel.fields"
ng-show="!auimodelField.showOnlyIf || {{auimodelField.showOnlyIf || false}}">