小编Waw*_*awy的帖子

为什么ngIf的优先级高于{{}}(插值)?

设置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

5
推荐指数
1
解决办法
4254
查看次数

标签 统计

angularjs ×1