我的应用程序中有很少的弹出窗口。一个用于显示“关于”,第二个用于显示联系表格。我目前所做的是将整个弹出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();
});
}
}
});
并在我的index.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');
}
});
我觉得这不是处理这个问题的最佳方法,但无法弄清楚如何做得更好。你有什么想法吗?
答案 0 :(得分:0)
我做的最后一个应用程序需要一个简单的模式来显示消息,而我的方式是使用与你的指令非常相似的指令。
该指令附加模板并使用$ 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。
这是一个很好的问题,我对它将得到的答案感到好奇。