Angularjs ui路由器中的状态转换和从父抽象状态解析
我想在Angular ui router应用程序中的状态转换期间显示加载动画 检查以下代码Angularjs ui路由器中的状态转换和从父抽象状态解析,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我想在Angular ui router应用程序中的状态转换期间显示加载动画 检查以下代码 $stateProvider .state("app", { abstract: true, url: "", template: "<ui-view/>", controller: "appController", controllerAs: "vm", resolve: { result_data_abstract: func
$stateProvider
.state("app",
{
abstract: true,
url: "",
template: "<ui-view/>",
controller: "appController",
controllerAs: "vm",
resolve: {
result_data_abstract: function ($q, $timeout))
{
var deferred = $q.defer();
$timeout(function () {
deferred.resolve("from abstract");
}, 500);
return deferred.promise;
}
}
})
.state("app.real",
{
url: "/real/{id}",
templateUrl: "somepath/template.html",
controller: "realController",
controllerAs: "vm",
resolve: {
result_data_real: function ($q, $timeout))
{
var deferred = $q.defer();
$timeout(function () {
deferred.resolve("from real");
}, 500);
return deferred.promise;
}
}
}
.state("app.real2",
{
url: "/real2/{id}",
templateUrl: "somepath2/template.html",
controller: "real2Controller",
controllerAs: "vm",
// Note no resolve
})
由于具体状态从中继承的抽象状态具有解析,因此我希望每次“toState.resolve
”都为true,从它继承的抽象父状态获取解析
但事实并非如此——当我加载app.real2时,toState.resolve
”为空
有什么方法可以让这个工作正常吗?你正在加载整个“页面”吗?如果是这样的话,我会在run中调用它
app.run(function($rootScope) {
$rootScope.$on("$stateChangeStart", function () {
console.log("stateChangeStart");
showSpinner();
});
$rootScope.$on("$viewContentLoaded", function () {
console.log("stateChangeSuccess");
hideSpinner();
});
});
我不使用$stateChangeSuccess和toState,但它看起来也可以工作。视图转换将是instantaneos。你甚至看不到加载器。也许您想在执行http请求时显示加载程序?我认为此注释^。为什么在显示微调器之前检查分辨率很重要?您可以只显示和隐藏它,如果缓存解析结果,则不会看到微调器(或仅在几毫秒内。您还可以将
参数添加到要显示微调器的特定状态,并选中toParams.showSpinner
(例如)相反,如果你的决心需要一两秒钟,你就会看到它。
app.run(function($rootScope) {
$rootScope.$on("$stateChangeStart", function () {
console.log("stateChangeStart");
showSpinner();
});
$rootScope.$on("$viewContentLoaded", function () {
console.log("stateChangeSuccess");
hideSpinner();
});
});