如何在页面重新加载时延迟应用程序控制器的初始化(路由器中的“解析”属性)?或许更好的问题,如何延迟视图直到我的控制器检索到用户对象,特别是在页面重新加载?
我目前在ApplicationCtrl的顶部有这个
if (localStorage.getItem('token') && localStorage.getItem('token') != 'null')
{
sessionStorage.setItem('token', localStorage.getItem('token'))
}
if (sessionStorage.getItem('token') && sessionStorage.getItem('token') != 'null')
{
UserSvc.getUser()
.then(function (response)
{
loadUser(response.data)
})
.then(function (error)
{
if (error) $scope.logout()
})
}
这将检查身份验证令牌,然后使用该令牌从数据库中获取用户对象。
但问题是页面出现后用户数据断断续续,因此在用户的显示名称突然出现几毫秒之后,我们的导航栏才为空。
如何在最初的用户请求完成之前延迟显示此视图?
答案 0 :(得分:1)
想出来。我刚刚创建了一个顶级$ scope boolean $ scope.initResolved,它通过完成第一次用户检查(无论是否检索用户)呈现为真,并将头文件和ng-view设置为ng-if =“initResolved”
$scope.initResolved = false
if (localStorage.getItem('token') && localStorage.getItem('token') != 'null')
{
sessionStorage.setItem('token', localStorage.getItem('token'))
}
if (sessionStorage.getItem('token') && sessionStorage.getItem('token') != 'null')
{
UserSvc.getUser()
.then(function (response)
{
loadUser(response.data)
$scope.initResolved = true
})
.then(function (error)
{
if (error) $scope.logout()
$scope.initResolved = true
})
}
else if ($location.url() == "")
{
$location.path('/welcome')
$scope.initResolved = true
}
else $scope.initResolved = true
答案 1 :(得分:1)
然后,这应该放在你的UserStatus
状态中,customService将返回包含promise对象的controller
。然后,您可以将此服务添加到您的控制器,resolve: function() {
'UserStatus': function(UserSvc) {
if (localStorage.getItem('token') && localStorage.getItem('token') != 'null') {
sessionStorage.setItem('token', localStorage.getItem('token'))
}
if (sessionStorage.getItem('token') && sessionStorage.getItem('token') != 'null') {
return UserSvc.getUser();
}
}
}
将等待此依赖性得到解决。
app.controller('myCtrl', function(UserStatus, $scope){
UserStatus.then(function(data){
//you will get response here
})
})
<强>控制器强>
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MyConn.Open()
Dim sql = "SELECT * FROM [maint]"
dt.Clear()
If R1.Checked Then sql = sql & " where datevisite like '%" & dateintervention.Text & "%' "
If R2.Checked Then sql = sql & " [centr] ='" & Me.centra.Text & "'"
If R3.Checked Then sql = sql & "and [Priorité] ='" & Me.Priorite.Text & "'"
If R4.Checked Then sql = sql & "and [Etat_intervention] ='" & Me.etat.Text & "'"
Dim adapter As New OleDbDataAdapter(sql, MyConn)
adapter.Fill(dt)
DGV.DataSource = dt
DGV.Refresh()
MyConn.Close()
End Sub