设置ngIf优先级(600)高于{{ }}(100)的原因是什么?是否应该具有较低的优先级来允许{{ }}内部ng-if属性值?
我想在$scope变量中有一个条件:
控制器:
app.controller('MainCtrl', function($scope, $http, $parse) {
$scope.hide = "check === 'hidden'";
$scope.parsecond = function (cond) {
return $parse(cond)($scope);
};
});
Run Code Online (Sandbox Code Playgroud)
模板:
<body ng-controller="MainCtrl">
<div ng-if="!{{hide}}">funky ng-if div</div>
<div ng-hide="{{hide}}">ng-hide div</div>
<div ng-if="!parsecond(hide)">ng-if div</div>
<input type="input" ng-model="check" />
</body>
Run Code Online (Sandbox Code Playgroud)
ng-hide工作正常,因为它解析hide变量的内容并返回"check ==='hidden'",然后由ng-hide指令进行评估.
但是在插入之前ng-if尝试进行评估{{hide}}有机会解析字符串,因此 ng-if抛出异常.
我发现的唯一解决方案是调用一个函数,它基本上完成了interpolate指令的工作并返回解析的内容.
Plnkr显示问题:链接
编辑:
在阅读文档之后,我发现更好的方法,而不需要自定义方法,$scope因为angularjs已经有一个方法可以解析变量对其current $scope($eval).
所以我的解决方案是:
<body ng-controller="MainCtrl">
<div ng-if="!$eval(hide)">funky …Run Code Online (Sandbox Code Playgroud) angularjs ×1