在复杂的AngularJS应用程序中使对象全局可访问和可操作的最佳方法是什么?

时间:2015-05-30 22:59:40

标签: javascript angularjs oop object global-variables

首先,如果这个问题是重复的,我会道歉(我知道它看起来很可疑),但我有一些特定的要求,我不确定他们是否对其他解决方案感到满意。他们可能是,但我不确定。

我正在使用AngularJS构建一个HTML5 + CSS3 + JS Web应用程序,使用node webkit将其部署为桌面应用程序。该应用程序将支持竞赛活动的运行,在比赛进行过程中按分数对队伍和竞争对手进行分类,以及其他一些任务。

该应用程序将有多个组件,所有组件都需要能够访问和编辑锦标赛,以及本地存储锦标赛(可能作为JSON对象)。

目前我打算将锦标赛创建为单个对象,其他对象(团队,竞争对手,评委)嵌套在其中。以满足我要求的方式创建此锦标赛的最佳方式是什么?

我还需要能够稍后向应用添加新部件,并轻松地为这些组件提供相同的能力(查看和更新​​锦标赛对象)。

非常感谢!

2 个答案:

答案 0 :(得分:0)

设置工厂/服务并从那里返回锦标赛对象,或使用它的方法。然后,您可以将服务注入您想要访问它的控制器中。您还可以定义引用锦标赛对象的范围变量,以使其可以从您的应用程序指令中访问。

答案 1 :(得分:0)

我曾经将所有全局变量移动到$ ootScope。但最好不要堵塞它,你可以使用一个物体。

angular.module('sampleApp', [])
    .config(['$compileProvider', function ($compileProvider) {
        $compileProvider.debugInfoEnabled(false);
    }])
    .run(['$rootScope', function ($rootScope) {
        $rootScope.globalVars = {};
    }])
.controller('mainController', ['$scope', '$rootScope', function ($scope, $rootScope) {

    $rootScope.globalVars.name = "Batman";
}])
 .directive('plugin', ['$compile,$rootScope', function ($compile, $rootScope) {
     return {
         restrict: 'A',
         link: function (scope, $element, attrs) {
             console.log($rootScope.globalVars.name); //Batman
         }
     }
 }]);