我試圖解決類似的問題,並創建了UI路由器附加「未來的狀態」。未來狀態會嘗試解決其他問題,例如使用RequireJS的延遲加載,整個卸載模塊的佔位符,以及通過書籤URL來路由未加載的佔位符。
這裏是一個普拉克演示如何使用未來各國你的使用情況:http://plnkr.co/edit/Ny7MQcmy35dKeEjbw57d?p=preview
我嘗試使用計算器段亞軍,但出了問題,所以這裏是代碼的非可運行糊。
JS:
// Code goes here
var app = angular.module("jsonstates", ["ct.ui.router.extras"]);
app.config([ '$stateProvider', '$futureStateProvider',
function($sp, $fsp) {
var futureStateResolve = function($http) {
return $http.get("states.json").then(function(response) {
angular.forEach(response.data, function(state) {
$sp.state(state);
})
})
}
$fsp.addResolve(futureStateResolve);
console.log($fsp);
}]);
app.controller("someCtrl", function() { })
HTML:
<!DOCTYPE html>
<html>
<head>
<script data-require="[email protected]" data-semver="1.2.25" src="https://code.angularjs.org/1.2.25/angular.js"></script>
<script src="https://rawgit.com/angular-ui/ui-router/0.2.11/release/angular-ui-router.js"></script>
<script src="https://rawgit.com/christopherthielen/ui-router-extras/0.0.10/release/ct-ui-router-extras.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="jsonstates">
<h1>Hello Plunker!</h1>
<a href="#/top">Top state</a> <a href="#/top/nested">Nested state</a>
<div ui-view></div>
</body>
</html>
JSON:
[
{
"name": "top",
"url": "/top",
"controller": "someCtrl",
"template": "<h1>top state</h1><div ui-view></div>"
},
{
"name": "nested",
"parent": "top",
"url": "/nested",
"controller": "someCtrl",
"template": "<h1>nested state</h1><div ui-view></div>"
}
]
將未來狀態之前直接訪問的狀態時,這項工作已經被加載?示例website.com/nested在您的json中。 – user2215771 2014-10-15 07:27:10
是的,未來狀態會延遲UI路由器的路由,直到解決所有的$ fsp.addResolve承諾。 – 2014-10-15 14:13:47
這與我所尋找的非常接近,除非我需要使用templateURL,所以我可以從$ templateCache加載,而不是應用於模板屬性的內嵌html標記。還可以使用視圖將狀態定義爲抽象? 任何想法如何我可以做到這一點,使用你已經證明了,感謝您的時間和耐心。我真的需要使用上述條件從json動態加載路由。 – 2014-10-21 14:06:48