如何在没有引导的情况下正确处理 AngularJS 应用程序中的弹出窗口(模态)
How to properly handle popups (modals) in AngularJS app without bootstrap
我的应用程序中几乎没有弹出窗口。一个用于显示"关于",第二个用于显示联系表单。我目前所做的是将整个弹出 DOM 放入模板中并编写如下自定义指令:
angular.module('app').directive('contactForm', function() {
return {
restrict: 'E',
replace: true,
scope: {},
templateUrl: 'contactForm.html',
controller: function($scope) {
$scope.submitForm = function() {
...
}
},
link: function(scope, el) {
scope.$on('openContactForm', function() {
el.show();
});
}
}
});
并在我的索引中的某个地方调用此类指令.html
<body>
<about-popup></about-popup>
<contact-form></contact-form>
...
...
</body>
页面上的某个地方有这样的控制器,其功能绑定到按钮:
angular.module('app').controller('SideBarController', function($scope, $rootScope) {
$scope.openContactForm = function() {
$rootScope.$broadcast('openContactForm');
}
});
我不觉得这是处理这个问题的最好方法,但不知道如何做得更好。你有什么想法,例子吗?
我做的最后一个应用程序需要一个简单的模式来显示消息,我的方式是使用与您的指令非常相似的指令。
该指令附加模板并使用$rootScope来存储模态对象,该对象具有属性 show(由模板中的 ng-show 使用)和每次我需要显示/隐藏模态窗口时调用的切换函数。因为对象在$rootScope所以你可以在任何地方使用它。
这是该指令的简化版本。
app.directive('myModal', ['$rootScope', function ($rootScope) {
return {
restric: 'A',
replace: true,
template: '<div class="modal" ng-show="modal.show">{{ modal.mainMessage }}<br /><button ng-click="modal.toggle()">Close</button></div>',
link: function (scope, elm, attrs) {
$rootScope.modal= {
mainMessage: '',
show: false,
toggle: function (mainMessage) {
this.mainMessage = mainMessage;
this.show = !this.show;
}
};
}
};
}]);
这是一个JSBin。
这是一个很好的问题,我很好奇它会得到什么答案。
相关文章:
- Chrome应用程序调整窗口大小保持纵横比
- 在我的应用程序中,当我使用targent as_blank时,弹出窗口被阻止
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- 应用程序引擎终结点:用于OAuth2授权的Javascript客户端库需要多个弹出窗口
- HTA应用程序:将窗口放在屏幕的右下角
- 在ios Cordova应用程序中打开iTunes窗口
- IE窗口失去了对任何XMLHttpRequest启动Angular应用程序的关注
- 是否可以使用javascript激活windows应用程序窗口
- 在Metro应用程序中获取窗口尺寸
- 如何为Tide Sdk应用程序窗口设置固定大小
- 如何使用chrome应用程序窗口动态调整文本区域的大小
- 使谷歌打包的应用程序窗口可拖动
- Chrome应用程序:从后台脚本执行在应用程序窗口中定义的函数
- 如何在ChromeOS应用程序窗口中启用文本选择
- 屏幕重新打开后,快速更新Chrome应用程序窗口
- 在Chrome应用程序的应用程序窗口关闭时关闭Websocket
- 缩放Chrome应用程序窗口取决于显示大小
- 如何使用Node.js获取在Mac前台运行的应用程序窗口的坐标
- 如何从我的应用程序窗口删除元素