javascript - 如何获得嵌套的 ng-if 触发?

标签 javascript angularjs angularjs-ng-if

如果我在 ng-if 中有一个 ng-if,如果外部 ng-if 上的条件正在隐藏,则内部 ng-if 将不会启动。

我希望嵌入的 ng-if 能够触发,即使外部的 ng-if 正在隐藏。在这种特殊情况下,我有一个很长的过渡,因此项目中发生的事情仍然可以看到。

点击切换应该显示“再见”,但由于外部 div 正在被删除,内部内容不会更新。

https://plnkr.co/edit/0MT62ZNJ8rsLtnhhryfk?p=preview

var app = angular.module('App', ['ngAnimate']);

app.controller('HomeController', ['$scope', function(scope) {
  scope.data = {
    show: true,
    show2: true,
  };
  scope.toggle = function() {
    scope.data.show = !scope.data.show;
    scope.data.show2 = !scope.data.show2;
  };
}]);
div {
  padding: 20px;
  border: 1px solid black;
}

.out {
  transition: 4s;
}

.out.ng-leave {
  background: red;
}

.out.ng-leave-active {
  background: purple;
}

.out.ng-enter {
  background: yellow;
}

.out.ng-enter-active {
  background: green;
}

.as-console {
display: none !important;
}
<!doctype html>
<html ng-app="App">

<head>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular-animate.min.js"></script>

</head>

<body ng-controller="HomeController">

  <div class="out" ng-if="data.show" ng-animate-children>
    <div class="inA" ng-if="data.show">
      HELLO
    </div>
    <div class="inB" ng-if="!data.show">
      GOODBYE
    </div>
  </div>

  <div ng-click="toggle()">toggle</div>

</body>

</html>

最佳答案

使用 $timeout 更改变量之一,因此内容将在父 div 元素开始动画之前更新:

var app = angular.module('App', ['ngAnimate']);

app.controller('HomeController', ['$scope', '$timeout', function(scope, $timeout) {
  scope.data = {
    show: true,
    show2: true,
  };
  scope.toggle = function() {
    $timeout(function(){  scope.data.show = !scope.data.show; });
    scope.data.show2 = !scope.data.show2;
  };
}]);
div {
  padding: 20px;
  border: 1px solid black;
}

.out {
  transition: 4s;
}

.out.ng-leave {
  background: red;
}

.out.ng-leave-active {
  background: purple;
}

.out.ng-enter {
  background: yellow;
}

.out.ng-enter-active {
  background: green;
}

.as-console {
  display: none !important;
}
<!doctype html>
<html ng-app="App">

<head>
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script>
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular-animate.min.js"></script>

</head>

<body ng-controller="HomeController">

  <div class="out" ng-if="data.show" ng-animate-children>
    <div class="inA" ng-if="data.show2">
      HELLO
    </div>
    <div class="inB" ng-if="!data.show2">
      GOODBYE
    </div>
  </div>

  <div ng-click="toggle()">toggle</div>

</body>

</html>

关于javascript - 如何获得嵌套的 ng-if 触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46340407/

相关文章:

angularjs - 带过滤器的MD芯片

javascript - 非 200 时 Angular 没有得到响应

javascript - GWT Highcharts - 禁用系列动画

javascript - 使用 .each() 获取 jQuery 数组中第一个索引的值

javascript - 调用 jQuery 函数的链接似乎不起作用

angularjs - Protractor - 如何验证切换按钮是否已选择/启用或未选择?

javascript - Angular ng-if 子句不能双向工作

angularjs - 使用 ng-if 作为 ng-repeat 内部的开关?

javascript - ng-repeat 可以在 Angular Js 中接受用户定义的 $index 增量吗?

javascript - 使用 1 个按钮获取 2 个 Canvas 图像