AngularJS ng-if没有显示DIV

时间:2016-03-24 14:55:08

标签: angularjs angular-ng-if

为什么我的应用无法正常使用?它必须在底部显示一个(一次一个)div与" ng-if"标签.. 这是小提琴:

Fiddle

<div class="fix" ng-if="showAdd()">
  <button type="button" class="btn btn-link">
    <span class="glyphicon glyphicon-plus"></span>
    <span class="fix">Aggiungi un Preferito</span>
  </button>
  <div class="add">
  Aggiungi un Preferito
  </div>
</div>
<div class="edit" ng-if="showEdit()">
Modifica
</div>

3 个答案:

答案 0 :(得分:2)

问题在于showEdit()功能。

你的小提琴你有:

    function showEdit() {
        return $scope.startEdit && !$scope.startAdd;
    }

startEditstartAdd定义为:

    function startAdd() {
        $scope.addBookmark = true;
        $scope.editBookmark = false;
    }


    function startEdit() {
        $scope.editBookmark = true;
        $scope.addBookmark = false;
    }

当您的ng-if致电showEdit()时,它会返回$scope.startEdit && !$scope.startAdd;

但是,$scope.startEdit$scope.startAdd是函数,因此它们将是&#34; truthy&#34; (即在布尔表达式中求值为true)。因此,布尔表达式始终计算为false(并且您的DIV保持隐藏状态)。

见下文:

$scope.startEdit && !$scope.startAdd;
true && !true
true && false
false

看起来您在概念上缺少调用函数或评估布尔表达式的东西。

如果要调用JavaScript函数,则必须使用带括号的函数名称,就像使用ng-if="showEdit()"块一样。

同样,如果$scope.showEdit()打算致电startAdd()startEdit(),您应该这样做:

    function showEdit() {
        return $scope.startEdit() && !$scope.startAdd();
    }

但是,您仍有问题,因为startEdit()startAdd()不会返回任何内容,因此会评估为undefined

如果您按照上述说明编辑showEdit()函数并让startEdit()startAdd()返回布尔表达式,那么您应该很高兴。

答案 1 :(得分:1)

看起来你的小提琴有一个错误。如果您将showAddshowEdit方法更改为以下内容,则会显示编辑div:

function showAdd() {
    return $scope.addBookmark && !$scope.editBookmark;
}

function showEdit() {
    return $scope.editBookmark && !$scope.addBookmark;
}

add div永远不会被添加,因为startAdd函数会激活它,而不会在任何地方调用它。

另外,请在此处发布您的JavaScript代码。这样,如果你的小提琴发生了什么事情,这个问题可能对其他人有用。

编辑:

要使添加按钮起作用,您需要更改此内容:

<div class="fix" ng-if="showAdd()">
  <button type="button" class="btn btn-link">
    <span class="glyphicon glyphicon-plus"></span>
    <span class="fix">Aggiungi un Preferito</span>
  </button>
  <div class="add">
  Aggiungi un Preferito
  </div>
</div>

对此:

<button type="button" class="btn btn-link" ng-click="startAdd()">
    <span class="glyphicon glyphicon-plus"></span>
    <span class="fix">Aggiungi un Preferito</span>
  </button>
<div class="fix" ng-if="showAdd()">
  <div class="add">
  Aggiungi un Preferito
  </div>
</div>

答案 2 :(得分:0)

如果希望始终显示一个或另一个,那么最好按如下方式构建视图:

<div class="fix" ng-if="showingAdd">
  <button type="button" class="btn btn-link">
    <span class="glyphicon glyphicon-plus"></span>
    <span class="fix">Aggiungi un Preferito</span>
  </button>
  <div class="add">
  Aggiungi un Preferito
  </div>
</div>
<div class="edit" ng-if="!showingAdd">
Modifica
</div>