如何在多个js文件中初始化angularjs&$ 39的rootScope

时间:2014-10-20 09:32:49

标签: javascript angularjs

抱歉,我的英文。 我有很多页面和表格的angularjs应用程序。 对于任何页面创建的文件,包含此页面的模型。 例如:

file userDict.js:

$rootScope.dicts.user = {
    userTypes : { ... },
    maxAge : ...,
    minAge : ... ,
    ...
}

file companyDict.js:

$rootScope.dicts.company = {
        companyTypes : { ... },
        blabla : ...,
        blabla : ... ,
        ...
    }

files *Dict.js
....
....

UserController$rootScope.dicts.user中使用CompanyController - $rootScope.dicts.company

这样做是为了便于分离大型模型。

但是如何在每个js模型文件中调用$rootScope.dicts.??? = { ... }

如何使用在init app期间调用的模型包装每个文件?

例如,如果我使用平面jQuery编写它,我会为每个文件

这样做
file userDict.js:

$(document).ready(function(){

   $rootScope.dicts.user = {
    userTypes : { ... },
    maxAge : ...,
    minAge : ... ,
    ...
}
});

2 个答案:

答案 0 :(得分:1)

如果我清楚地了解你想要什么,你有两种选择。

1)在第一个选项中你应该这样做:

angular.module('myApp', [])
.run(function($rootScope) {
    $rootScope.dicts = {}; 
    $rootScope.dicts.user = "rootScope";
})
.controller('myCtrl', function($scope, $rootScope) {    
    $scope.userDict = $rootScope.dicts.user;
})
.controller('myCtrl2', function($scope, $rootScope) {    
    $scope.userDict = $rootScope.dicts.user;
});

此示例为JSFiddle

此代码提供从任何控制器获取$rootScope变量的可能性。

但是你不要忘记将$rootScope注入控制器。

2)第二个选项是使用共享服务

myApp.factory('sharedService', function () {
    var sharedService = {};
    sharedService.dict = {};
    sharedService.dict.user = "any value";

    return sharedService;
});

myApp.controller('FirstCtrl', function ($scope, sharedService) {
    $scope.user = sharedService.dict.user;
});

myApp.controller('SecondCtrl', function ($scope, sharedService) {
    $scope.user = sharedService.dict.user;
});

答案 1 :(得分:0)

根据@ artyom-paranovich的回答,我认为你有2个选择。

第一个更好的解决方案是将您的数据作为服务。请注意,服务不仅适用于数据库数据,还适用于您正在执行的常规数据。 我会写一个例子,但@ artyom-paranovich做得很好。 我建议您采取这种方法。

第二个选项是将数据包装在div中,并为该div提供控制器,使其成为所有子控制器的父级。这样,您就可以在父控制器中启动数据,并且所有子控制器都可以访问它

您的HTML:

<html ng-app>
    <head>
    ....
    </head>
    <body>
        <div ng-contoller="ParentController"> 
            <div ng-contoller="subController1"> </div>
            <div ng-contoller="subController2"> </div>
        </div>
    </body>
</html>

ParentController.js

myApp.controller('ParentController', function ($scopeScope) {
    $rootScope.dicts.user = {
        userTypes : { ... },
        maxAge : ...,
        minAge : ... ,
        ...
    };
}
});