如何基于布尔值在AngularJS中切换ng-show?

lia*_*dee 111 html javascript angularjs ng-show

我有一个表单来回复我想要显示的消息,只有当它isReplyFormOpen为真时,每次我点击回复按钮我想切换表单是否显示.我怎样才能做到这一点?

Nit*_*sal 216

您只需要在ng-click事件上切换"isReplyFormOpen"的值

<a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>
 <div ng-show="isReplyFormOpen" id="replyForm">
   </div>
Run Code Online (Sandbox Code Playgroud)

  • 解决了它.因为我的ng-click嵌套在ng-repeat中,所以它创建了一个子作用域,当你试图改变它的值*时它会隐藏父布尔*.请参阅/sf/ask/1077184111/.根据Angular最佳实践,您应该将$ scope视为指令中的只读. (3认同)

lia*_*dee 30

基本上我解决了它的 -ing的isReplyFormOpen时,它被点击价值:

<a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>

<div ng-init="isReplyFormOpen = false" ng-show="isReplyFormOpen" id="replyForm">
    <!-- Form -->
</div>
Run Code Online (Sandbox Code Playgroud)

  • @CharlieS没必要,isReplyFormOpen最初是`undefined`而``undefined == true` (6认同)

小智 17

如果基于点击这里是:

ng-click="orderReverse = orderReverse ? false : true"
Run Code Online (Sandbox Code Playgroud)


Jam*_*tes 5

值得注意的是,如果控制器A中有一个按钮,并且要在控制器B中显示该元素,则可能需要使用点符号来跨控制器访问范围变量.

例如,这将无法正常工作:

<div ng-controller="ControllerA">
  <a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>

  <div ng-controller="ControllerB">
    <div ng-show="isReplyFormOpen" id="replyForm">
    </div>
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请创建一个全局变量(即在Controller A或主控制器中):

.controller('ControllerA', function ($scope) {
  $scope.global = {};
}
Run Code Online (Sandbox Code Playgroud)

然后为点击添加"全局"前缀并显示变量:

<div ng-controller="ControllerA">
  <a ng-click="global.isReplyFormOpen = !global.isReplyFormOpen">Reply</a>

  <div ng-controller="ControllerB">
    <div ng-show="global.isReplyFormOpen" id="replyForm">
    </div>
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看Angular-UI文档中嵌套状态和嵌套视图,观看视频或阅读理解范围.