ng-if 里面的 md-menu 没有正确打开
ng-if inside of md-menu not opening properly
我在 <md-menu>
标签内有一个 ng-if
,当用户单击菜单中的项目时,它会切换更多信息。但是,当我单击菜单项时,菜单关闭。当我重新打开它时,DOM 显示额外信息正在显示,但它实际上并未显示在菜单中,并且菜单未调整大小以适应应有的内容。
这是我的菜单代码:
<md-menu>
<md-button aria-label="Open Notifications Menu" ng-click="$mdOpenMenu($event)">
<md-icon md-svg-icon="bell"></md-icon>
</md-button>
<md-menu-content width="5">
<md-menu-item ng-repeat="notification in vm.notificationList">
<div aria-label="Notification" ng-click="vm.showDetails(notification)" md-prevent-menu-close="md-prevent-menu-close">
<div layout="column">
<div flex layout="row" layout-align="start center">
<span flex><b>{{notification.title}}</b></span>
<span style="opacity: 0.5">{{vm.getTime(notification)}}</span>
</div>
<div ng-show="notification.showDetails">
<span style="opacity: 0.7">{{notification.details}}</span>
</div>
</div>
</div>
</md-menu-item>
</md-menu-content>
</md-menu>
这是打字稿中 ng-click
的函数:
showDetails(message: any): void {
message.showDetails = !message.showDetails;
}
编辑
我使用 md-prevent-menu-close
解决了菜单关闭的问题...呃。我已经更新了 html。问题还是一样,菜单没有改变大小来显示新数据。
编辑
我通过删除 md-button
并将其替换为 div
解决了内容不显示的问题。我相应地更新了 html。现在唯一的问题是菜单不会调整其高度以整齐地适应新内容。
使用 ng-show
而不是 ng-if
。如果不满足某些条件,ng-if
会永久删除 DOM 中的元素。 ng-show
只是在元素是否隐藏之间切换。
这是你想要的吗? - CodePen
标记
<div ng-controller="AppCtrl as vm" ng-cloak="" ng-app="MyApp">
<md-menu>
<md-button aria-label="Open Notifications Menu" ng-click="$mdOpenMenu($event)">
Bell
</md-button>
<md-menu-content width="5">
<md-menu-item ng-repeat="notification in vm.notificationList" ng-click="vm.showDetails($index)" md-prevent-menu-close="md-prevent-menu-close" aria-label="Notification">
<div layout="column" flex>
<div flex layout="row" layout-align="start center">
<span flex><b>{{notification.title}}</b></span>
<span style="opacity: 0.5">22-08-2016 09:06</span>
</div>
<div ng-if="notification.showDetails">
<span style="opacity: 0.7">{{notification.details}}</span>
</div>
</div>
</md-menu-item>
</md-menu-content>
</md-menu>
</div>
JS
angular.module('MyApp',['ngMaterial', 'ngMessages'])
.controller('AppCtrl', function() {
var vm = this;
vm.notificationList = [
{title: "Read", details: "Enjoy the book", showDetails: false},
{title: "Eat", details: "You're hungry", showDetails: false},
{title: "Dring", details: "Have a pint of lager", showDetails: false}
]
vm.showDetails = function (index) {
vm.notificationList[index].showDetails = !vm.notificationList[index].showDetails;
}
});
我在 <md-menu>
标签内有一个 ng-if
,当用户单击菜单中的项目时,它会切换更多信息。但是,当我单击菜单项时,菜单关闭。当我重新打开它时,DOM 显示额外信息正在显示,但它实际上并未显示在菜单中,并且菜单未调整大小以适应应有的内容。
这是我的菜单代码:
<md-menu>
<md-button aria-label="Open Notifications Menu" ng-click="$mdOpenMenu($event)">
<md-icon md-svg-icon="bell"></md-icon>
</md-button>
<md-menu-content width="5">
<md-menu-item ng-repeat="notification in vm.notificationList">
<div aria-label="Notification" ng-click="vm.showDetails(notification)" md-prevent-menu-close="md-prevent-menu-close">
<div layout="column">
<div flex layout="row" layout-align="start center">
<span flex><b>{{notification.title}}</b></span>
<span style="opacity: 0.5">{{vm.getTime(notification)}}</span>
</div>
<div ng-show="notification.showDetails">
<span style="opacity: 0.7">{{notification.details}}</span>
</div>
</div>
</div>
</md-menu-item>
</md-menu-content>
</md-menu>
这是打字稿中 ng-click
的函数:
showDetails(message: any): void {
message.showDetails = !message.showDetails;
}
编辑
我使用 md-prevent-menu-close
解决了菜单关闭的问题...呃。我已经更新了 html。问题还是一样,菜单没有改变大小来显示新数据。
编辑
我通过删除 md-button
并将其替换为 div
解决了内容不显示的问题。我相应地更新了 html。现在唯一的问题是菜单不会调整其高度以整齐地适应新内容。
使用 ng-show
而不是 ng-if
。如果不满足某些条件,ng-if
会永久删除 DOM 中的元素。 ng-show
只是在元素是否隐藏之间切换。
这是你想要的吗? - CodePen
标记
<div ng-controller="AppCtrl as vm" ng-cloak="" ng-app="MyApp">
<md-menu>
<md-button aria-label="Open Notifications Menu" ng-click="$mdOpenMenu($event)">
Bell
</md-button>
<md-menu-content width="5">
<md-menu-item ng-repeat="notification in vm.notificationList" ng-click="vm.showDetails($index)" md-prevent-menu-close="md-prevent-menu-close" aria-label="Notification">
<div layout="column" flex>
<div flex layout="row" layout-align="start center">
<span flex><b>{{notification.title}}</b></span>
<span style="opacity: 0.5">22-08-2016 09:06</span>
</div>
<div ng-if="notification.showDetails">
<span style="opacity: 0.7">{{notification.details}}</span>
</div>
</div>
</md-menu-item>
</md-menu-content>
</md-menu>
</div>
JS
angular.module('MyApp',['ngMaterial', 'ngMessages'])
.controller('AppCtrl', function() {
var vm = this;
vm.notificationList = [
{title: "Read", details: "Enjoy the book", showDetails: false},
{title: "Eat", details: "You're hungry", showDetails: false},
{title: "Dring", details: "Have a pint of lager", showDetails: false}
]
vm.showDetails = function (index) {
vm.notificationList[index].showDetails = !vm.notificationList[index].showDetails;
}
});