可以在状态文件中传递$ rootScope变量 - AngularJS

时间:2017-02-08 07:14:48

标签: angularjs angularjs-scope angular-ui-router

我正在开发一个Angular项目,目前正在努力使整个项目可配置。我有一个包含元素数组的对象,每个元素都是一个对象,其中包含项目不同页面的详细信息。

现在我可以在项目加载时获取对象,但是我被困在导航部分。以前,我在ui-srefstate文件中传递了一个文本,并点击了导航页面的链接。但现在文本是可配置的,即用户可编辑。所以我在ui-srefcontroller文件中传递了变量(用户输入的文本)。我通过迭代controller将所有数组元素的标题输入使用$ rootScope定义的数组,然后在state文件中使用此数组变量{{1 }}

那么,这个方法是否正确?我在加载项目时遇到以下错误 -

  

未捕获错误:[$ injector:modulerr]由于以下原因无法实例化模块myModule:   错误:[$ injector:unpr]未知提供者:$ rootScope

现在我认为它是$rootScope.array[0]作为未知提供者,但如何解决这个问题? 我已经将$rootScope作为参数传递给了所有关注的角度文件。

另外 - 可以在$rootScope文件中传递$ rootScope变量吗?

编辑 - 这是statecontroller代码以获取一些信息 -

控制器 - C:\ sandboxes \ projects \ Tests \ demo \ core \ src \ main \ webapp \ app \ layouts \ navigate

state

状态 - C:\ sandboxes \ projects \ Tests \ demo \ core \ src \ main \ webapp \ app \ pages \ loading-page

$scope.getData = function() {
              return $http.get('api/configurations')
                .success(function (response) {
                    $scope.JsonData = response;
                    return response;
                })
               .error(function (data, status, header, config) {
                   $scope.ResponseDetails = "Data: " + data +
                       "<br />status: " + status;
               });
        }

        $scope.getData().then(function(response){
            console.log(response);
            console.log($scope.JsonData[0].appConfigInfo);
            $scope.configObjectJson = JSON.parse($scope.JsonData[0].appConfigInfo);     // appConfigInfo contains the data of the different pages
            $scope.configObject = $scope.configObjectJson.PageConfig;
            console.log($scope.configObject);

            // below array to store the value of the title of each element of the array
            $rootScope.titleArray = [];
            for(var i=0; i < $scope.configObject.dashboards.length; i++) {
                $rootScope.titleArray[i] = $scope.configObject.dashboards[i].title;
            }
            console.log($rootScope.titleArray);
        });

注意 - angular.module('myApp') .config(stateConfig); stateConfig.$inject = ['$stateProvider', '$rootScope']; function stateConfig($stateProvider, $rootScope) { $stateProvider .state($rootScope.titleArray[0], { // $rootScope.titleArray is the variable created in the above controller parent: 'home', url: 'loadingPage', data: { authorities: ['ROLE_USER'], pageTitle: $rootScope.titleArray[0] }, views: { 'appContent@home': { templateUrl: 'app/entities/loading-page/loadingPage.html', controller: 'LoadingPageController', controllerAs: 'vm' } } }) } controller文件位于主文件夹下的不同位置。

我希望这个问题足够明确。非常感谢任何有用的评论。感谢。

1 个答案:

答案 0 :(得分:0)

不,你不能

来自Angular docs

  

模块是配置和运行块的集合,它们在引导过程中应用于应用程序。在最简单的形式中,该模块由两种块组成:

     

配置块 - 在提供商注册和配置阶段执行。只有提供程序和常量才能注入配置块。这是为了防止服务在完全配置之前意外实例化。

     

运行块 - 在创建注入器后执行并用于启动应用程序。只有实例和常量才能注入运行块。这是为了防止在应用程序运行时进一步进行系统配置。

以简单的英语,上述文档说您只能在运行块中的配置块,providersconstants中注入instancesconstants

如果您想访问$routeScope,则需要将代码移动到运行块中。

因此,如果我理解正确,您可以根据状态设置页面标题。

如果要根据状态动态更改页面标题