我有很多控制器可以在我的应用程序的不同页面中运行。我希望每个控制器都有特定的警报。一个非常通用的例子是:
{
"saveSuccess": {
"alertClass": "success",
"header": "Success!",
"body": "File saved successfully.",
"buttons": [{
"label": "OK",
"tooltip": "close",
"fn": function () {
$scope.alertShown = false;
document.querySelector("#result").innerHTML = "success acknowledged";
}
}]
},
"confirmWarning": {
"alertClass": "warning",
"header": "Warning!",
"body": "This could cause a problem. Are you sure you want to proceed?",
"buttons": [{
"label": "OK",
"tooltip": "close",
"fn": function () {
$scope.alertShown = false;
document.querySelector("#result").innerHTML = "warning accepted";
}
}, {
"label": "CANCEL",
"tooltip": "close",
"fn": function () {
$scope.alertShown = false;
document.querySelector("#result").innerHTML = "warning canceled";
}
}]
},
"error": {
"alertClass": "critical",
"header": "Alert!",
"body": "The request cannot be processed. Please try again.",
"buttons": [{
"label": "OK",
"tooltip": "close",
"fn": function () {
$scope.alertShown = false;
document.querySelector("#result").innerHTML = "error acknowledged";
}
}]
}
}
但每个页面都有自己的消息,因此这些相当通用的数据可能会非常长,而且非常具体。我想把所有这些分成不同的文件,所以我不会用我这样的配置对象来混乱我的所有控制器。我可以将它存储为字符串化的JSON并使用服务检索它,然后只重复显示和隐藏每个控制器之间的警报框的相当短的逻辑,但字符串化函数似乎有点愚蠢我觉得应该有一个相当干净的方式
a)使我的模板警报html可以在<alert-html></alert-html>
b)以某种方式将我的模型保存在一个单独的文件中,该文件将存储在每个单独的页面文件夹中,因此有类似
的内容-appPage1Dir -appPage1View.html -appPage1Controller.js -appPage1AlertBoxModel.js 我可以把它放到appPage1Controller.js范围
中的一些var中c)还将显示/隐藏逻辑拉入应用程序的每个页面。
我相信我可以建立一个工厂将数据返回给我的控制器,并且很容易将模板注入到视图中,但我怎样才能优雅地结合显示/隐藏逻辑,以免全部重复这个地方?我不认为这是偏离主题或基于意见的,我确信这是一个角色的常见任务,但我不熟悉它,知道该怎么做。
JSBIN在控制器中工作的整个事情。