如何在 ui-router 进入状态时立即显示模板,接下来当 promise 被解析时然后显示数据?
How to show template immediately on state enter in ui-router, next when promise is resolved then show data?
如何显示第一个模板,然后如果位置承诺已解决,只需在加载的模板中呈现它?甚至我想在输入中显示微调器以通知用户数据正在加载。我想我可以做一个可以直接在 landingCtrl 中使用的外部服务,但是是否可以通过 ui-router 以某种方式完成?
var app = angular
.module('myApp', [
'ngCookies', 'ui.router'
])
app.config(['$stateProvider', '$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
.state('landing', {
url: '/landing',
templateUrl: 'landing.html',
controller: 'landingCtrl',
resolve: {
location: [
'$state', '$stateParams', '$q', '$window'
, function ($state, $stateParams, $q, $window) {
var deferred = $q.defer();
$window.navigator.geolocation.getCurrentPosition(
function (position) {
deferred.resolve(position);
});
return deferred.promise;
}]
}
})
}])
app.controller('landingCtrl', ['$scope', 'location', function($scope, location) {
$scope.location = location;
}]);
landing.html
<h1>Show immediately</h1>
<input type="text" ng-model="location" showspinnerwhenloading></input>
Resolved data: {{location}}
这可能不是您正在寻找的答案,但您可以创建一个 abstract
状态并在其中 resolve
找出您想要去的地方,或者如果您的情况是想要在导航到主要 html
之前向用户显示一些内容,您可以创建一个具体的(而不是 abstract
)状态并导航到其解析中的子状态。这实际上取决于您想对主模板(无论位置如何都会加载的模板)做什么。
实施将是这样的:
--main state (abstract or concrete depending on your needs)
--child states (to which you're going to navigate to, when the parent's resolve promises return)
希望我能回答你的问题。
如何显示第一个模板,然后如果位置承诺已解决,只需在加载的模板中呈现它?甚至我想在输入中显示微调器以通知用户数据正在加载。我想我可以做一个可以直接在 landingCtrl 中使用的外部服务,但是是否可以通过 ui-router 以某种方式完成?
var app = angular
.module('myApp', [
'ngCookies', 'ui.router'
])
app.config(['$stateProvider', '$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
.state('landing', {
url: '/landing',
templateUrl: 'landing.html',
controller: 'landingCtrl',
resolve: {
location: [
'$state', '$stateParams', '$q', '$window'
, function ($state, $stateParams, $q, $window) {
var deferred = $q.defer();
$window.navigator.geolocation.getCurrentPosition(
function (position) {
deferred.resolve(position);
});
return deferred.promise;
}]
}
})
}])
app.controller('landingCtrl', ['$scope', 'location', function($scope, location) {
$scope.location = location;
}]);
landing.html
<h1>Show immediately</h1>
<input type="text" ng-model="location" showspinnerwhenloading></input>
Resolved data: {{location}}
这可能不是您正在寻找的答案,但您可以创建一个 abstract
状态并在其中 resolve
找出您想要去的地方,或者如果您的情况是想要在导航到主要 html
之前向用户显示一些内容,您可以创建一个具体的(而不是 abstract
)状态并导航到其解析中的子状态。这实际上取决于您想对主模板(无论位置如何都会加载的模板)做什么。
实施将是这样的:
--main state (abstract or concrete depending on your needs)
--child states (to which you're going to navigate to, when the parent's resolve promises return)
希望我能回答你的问题。