是否有办法根据服务器端JSON文件配置UI路由器状态。我不想避免对module.config(..)
内的状态进行硬编码。
我首先想到的是拥有可用状态映射数据的控制器,它只能调用$stateProvider
。但是,我相信,控制器不能将提供者注入其中。
我想到的另一个选项是将一个Javascript文件放在angular之外,它将状态配置数据放在某个全局变量中,以便从Module config函数中引用。
但是有更好的方法吗?
答案 0 :(得分:3)
我想说,通常有两种方法可以使用SERVER数据(JSON)来构建状态。
首先,我们可以使用$http
加载JSON:
AngularJS - UI-router - How to configure dynamic views
这里的要点是,我们将在 .config()
状态商店引用$stateProvider
并在 .run()
阶段使用它,一旦可以通过$http
// ref to provider, to be configured later
var $stateProviderRef;
// config phase
app.run(['$stateProvider',
function ($stateProvider)
{
$stateProviderRef = $stateProvider
}
// run phase
app.run(['$q', '$rootScope', '$state', '$http',
function ($q, $rootScope, $state, $http)
{
$http.get("myJson.json")
.success(function(data)
{
angular.forEach(data, function (value, key)
{
var state = {
"url": value.url,
...
};
...
// here we still configure provider, but in RUN
$stateProviderRef.state(value.name, state);
});
但是有一些缺点。主要是,直接网址导航(复制 - 粘贴)无法正常工作。该网址很快就不会得到解决......
其次,我的首选方式 - 在服务器上创建JSON作为变量,将其作为脚本加载。
所以服务器会以某种方式通过/ api / stateData生成响应,如:
var stateData = [{ stateName : "State1",
...
}];
我们会将其作为资源注入页面
<script src="/api/stateData" ...
这可以在 .config()
阶段直接使用,并且可以解决即时配置URL
的问题。