跨控制器共享通用逻辑和可变数据

时间:2015-08-25 21:40:30

标签: javascript angularjs model-view-controller

我有很多控制器可以在我的应用程序的不同页面中运行。我希望每个控制器都有特定的警报。一个非常通用的例子是:

{
            "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在控制器中工作的整个事情。

0 个答案:

没有答案