“角度材料”对话框选项卡式
angular material dialog tabbed
我的对话框上有两个选项卡。如何根据用户点击的按钮动态设置哪个按钮处于活动状态。
这是我的按钮:
<md-button ng-click="showTabDialog($event, 'login')" class="md-raised md-primary">Login</md-button>
<md-button ng-click="showTabDialog($event, 'signup')" class="md-raised md-primary">Signup</md-button>
这是我的对话框 html 模板
<md-dialog aria-label="Login">
<form>
<md-toolbar>
<div class="md-toolbar-tools">
<h2>Login</h2>
<span flex></span>
<md-button class="md-icon-button" ng-click="cancel()">
<md-icon aria-label="Close dialog"></md-icon>
<!--md-svg-src="img/icons/ic_close_24px.svg"-->
</md-button>
</div>
</md-toolbar>
<md-dialog-content style="max-width:800px;max-height:810px; ">
<md-tabs md-dynamic-height md-border-bottom>
<md-tab label="Login">
<md-content class="md-padding">
<h1 class="md-display-2">Log In</h1>
<p>Login here or click sign up to create a new account.</p>
</md-content>
</md-tab>
<md-tab label="Sign Up">
<md-content class="md-padding">
<h1 class="md-display-2">Sign Up</h1>
<p>Sign Up here</p>
</md-content>
</md-tab>
</md-tabs>
</md-dialog-content>
<md-dialog-actions layout="row">
<span flex></span>
<md-button ng-click="answerswer('not useful')" >
Not Useful
</md-button>
<md-button ng-click="answerswer('useful')" style="margin-right:20px;" >
Useful
</md-button>
</md-dialog-actions>
</form>
</md-dialog>
这是我的JS:
$scope.showTabDialog = function(ev, button) {
var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) &&
$scope.customFullscreen;
$mdDialog.show({
controller: 'SignUpCTRL',
templateUrl: 'app/login/signup.modal.html',
parent: angular.element(document.h1),
targetEvent: ev,
clickOutsideToClose:true,
openFrom: '#center',
fullscreen: useFullScreen
})
.then(function(answer) {
$scope.status = 'You said the information was "' + answer + '".';
}, function() {
$scope.status = 'You cancelled the dialog.';
});
};
因此,重申一下,用户点击注册对话框,然后打开该框,其中注册选项卡聚焦。用户点击登录按钮,对话框显示,其中登录选项卡聚焦。
更好的解决方案:
您可以将"selected"属性与范围变量"selectedIndex"放在一起,该变量将具有所需的选项卡值。
<md-tabs selected="selectedTab" >
在相应的控制器中:
$scope.selectedTab=1;//tab number
然后,您可以使用 ng 单击按钮来更改此值,让范围函数更改其值;
Angular Material 内置的 md-tabs 和 md-tab 指令具有默认值,需要覆盖这些默认值才能通过包含您自己的ng-class
来设置 md-active。选项卡上的"角度材质"默认 ng 类如下所示:
ng-class="{ 'md-active':tab.isActive(), 'md-focused':tab.hasFocus(), 'md-disabled':tab.scope.disabled }"
因为我的问题只有两个选项卡,所以我通过捕获哪个按钮被推入locals
然后将其分配给控制器$scope.active
中的一个变量来禁用默认选项卡,然后禁用默认选项卡如果用户没有像这样推送登录:
<md-tab label="Login" ng-disabled="active!='Login'">
我使用了两个模板、两个控制器和一个工厂。第一个模板具有用户单击的按钮:
<md-button ng-click="showTabDialog({tab: 0, event: $event})">One</md-button>
<md-button ng-click="showTabDialog({tab: 1, event: $event})">Two</md-button>
<md-button ng-click="showTabDialog({tab: 2, event: $event})">Three</md-button>
请注意从零开始的计数。单击将传递包含两个项目的数据对象:用户选择的选项卡和$event
(MouseEvent
(。
第一个控制器包括以下处理程序函数:
$scope.showTabDialog = function(data) {
var userData = {
selectedTab: data.tab
};
userFactory.set(userData); // passes data object to other controllers
$mdDialog.show({
controller: DialogController,
templateUrl: 'javascript/templates/tabDialog.html',
parent: angular.element(document.body),
targetEvent: data.event,
clickOutsideToClose:true
})
.then(function(answer) {
// fires on $scope.hide
})
.catch(function(error) {
if (error) {
console.error(error);
}
{
// fires on $scope.cancel
}
});
};
处理程序函数获取从单击按钮传入的data
对象,然后将数据对象发送到工厂,该工厂将数据对象传递给第二个控制器。接下来,$mdDialog.show
用于制作选项卡式对话框,其中包含第二个控制器和第二个模板的参数。其余的都是样板。 targetEvent
停止向 DOM 树传播。我输入了then
和catch
,以防您想对$scope.hide
和$scope.cancel
做点什么.
这是工厂:
app.factory('userFactory', function() {
var userObject = null;
function set(user) {
userObject = user;
};
function get() {
return userObject;
};
return {
set: set,
get: get
};
});
我将第二个控制器放在第一个控制器中,在处理程序函数下方:
function DialogController($scope, $mdDialog) {
$scope.user = userFactory.get();
$scope.selectedTab = $scope.user.selectedTab || 0;
$scope.hide = function() {
$mdDialog.hide();
};
$scope.cancel = function() {
$mdDialog.cancel();
};
$scope.answer = function(answer) {
$mdDialog.hide(answer);
};
}
此控制器获取通过工厂传入的数据,然后将数据设置为其$scope
。请注意,这个控制器有自己的$scope
,而不是第一个控制器的$scope
。我不使用$scope.hide
或$scope.answer
但我留下了这些,以防您需要它们。
最后,这是我的对话框模板:
<md-dialog aria-label="tabbed dialog">
<form>
<md-toolbar>
<div class="md-toolbar-tools">
<img ng-src="myLogo.png" alt="logo" style="height: 36px;">
<h2> MyCompany.com</h2>
<span flex></span>
<md-button class="md-icon-button" ng-click="cancel()">
<md-icon md-svg-src="media/icons/ic_close_24px.svg" aria-label="Close dialog"></md-icon>
</md-button>
</div>
</md-toolbar>
<md-dialog-content style="max-width:800px;max-height:810px; ">
<md-tabs md-dynamic-height md-border-bottom md-selected="selectedTab">
<md-tab label="one">
<md-content class="md-padding">
<h1 class="md-display-2">Tab One</h1>
<p>Lorem ipsum...</p>
</md-content>
</md-tab>
<md-tab label="two">
<md-content class="md-padding">
<h1 class="md-display-2">Tab Two</h1>
<p>Lorem ipsum...</p>
</md-content>
</md-tab>
<md-tab label="three">
<md-content class="md-padding">
<h1 class="md-display-2">Tab Three</h1>
<p>Lorem ipsum...</p>
</md-content>
</md-tab>
</md-tabs>
</md-dialog-content>
</form>
</md-dialog>
- CKeditor:更改对话框中的默认选择选项
- 无法在其他调用上设置jQuery对话框选项
- 在带有 bootbox 的自定义对话框中添加选项以选择表单控件.js在 ASP.NET MVC 中
- 选项卡控件 对话框控件
- 如何从钛中的选项对话框单击事件中隐藏Android软键盘
- “角度材料”对话框选项卡式
- 新窗口/选项卡中的JavaScript确认对话框
- 打开jQuery对话框,并选择相同的选项
- 有fb.ui对话框选项吗;共享此链接“;功能
- Facebook js-sdk添加选项卡对话框,是否有一种方法可以让用户键入自定义选项卡名称
- 在“下载文件”对话框中添加一个选项
- 如何在CKEditor 4中捕捉对话框选项卡的更改
- 如何将select选项传递到弹出对话框-php codeginiter
- jQuery UI 1.10:对话框和zIndex选项
- 将dojo对话框中的所有选项卡打印在纸上
- 结合jQuery对话框和选项卡时的高度问题
- 如何通过更改对话框选项来重用jQuery UI对话框
- jQuery UI对话框文本有换行符选项吗?
- P:对话框不显示在tabview的选项卡中
- 引导模态对话框选项卡在后面的页面