我正在开发一个Angular项目,目前正在努力使整个项目可配置。我有一个包含元素数组的对象,每个元素都是一个对象,其中包含项目不同页面的详细信息。
现在我可以在项目加载时获取对象,但是我被困在导航部分。以前,我在ui-sref
和state
文件中传递了一个文本,并点击了导航页面的链接。但现在文本是可配置的,即用户可编辑。所以我在ui-sref
和controller
文件中传递了变量(用户输入的文本)。我通过迭代controller
将所有数组元素的标题输入使用$ rootScope定义的数组,然后在state
文件中使用此数组变量{{1 }}
那么,这个方法是否正确?我在加载项目时遇到以下错误 -
未捕获错误:[$ injector:modulerr]由于以下原因无法实例化模块myModule: 错误:[$ injector:unpr]未知提供者:$ rootScope
现在我认为它是$rootScope.array[0]
作为未知提供者,但如何解决这个问题?
我已经将$rootScope
作为参数传递给了所有关注的角度文件。
另外 - 可以在$rootScope
文件中传递$ rootScope变量吗?
编辑 - 这是state
和controller
代码以获取一些信息 -
控制器 - 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
文件位于主文件夹下的不同位置。
我希望这个问题足够明确。非常感谢任何有用的评论。感谢。
答案 0 :(得分:0)
来自Angular docs
模块是配置和运行块的集合,它们在引导过程中应用于应用程序。在最简单的形式中,该模块由两种块组成:
配置块 - 在提供商注册和配置阶段执行。只有提供程序和常量才能注入配置块。这是为了防止服务在完全配置之前意外实例化。
运行块 - 在创建注入器后执行并用于启动应用程序。只有实例和常量才能注入运行块。这是为了防止在应用程序运行时进一步进行系统配置。
以简单的英语,上述文档说您只能在运行块中的配置块,providers
和constants
中注入instances
和constants
。
如果您想访问$routeScope
,则需要将代码移动到运行块中。
因此,如果我理解正确,您可以根据状态设置页面标题。
如果要根据状态动态更改页面标题