我是Angular的新手,这让我很难过。
我正在使用弹出窗口中的oAuth进行身份验证,并且我已经返回用户并关闭弹出窗口。设置isLoggedIn
时,我很难让控制器更新。我按照http://stsc3000.github.io/blog/2013/10/26/a-tale-of-frankenstein-and-binding-to-service-values-in-angular-dot-js/的步骤进行操作,但我无法使用它。我知道正在设置值,因为手动刷新用户工作。如果可能的话,我希望能够避免在我的所有控制器中使用$scope.$watch
。
currentUser.coffee服务
app.service 'currentUser',
['$sails', '$window',
( $sails, $window ) ->
@isLoggedIn = false
@loginWithFacebook = ->
# open popup
left = screen.width / 2 - 200
top = screen.height / 2 - 250
popup = $window.open('/auth/facebook', '', "top=#{top}, left=#{left}, width=400, height=500")
# close popup and set currentUser
$window.completeLogin = (user) =>
@isLoggedIn = true
popup.close()
return
]
navCtrl.coffee
app.controller 'navCtrl',
['$scope', 'currentUser'
( $scope, currentUser) ->
$scope.user = currentUser
$scope.refreshUser = ->
$scope.user = currentUser
]
nav.jade
.text-center(ng-hide='user.isLoggedIn')
h4: strong WhatWhenWhere
h6.subheader: strong Sign in to get the whole shebang
br
form
input(type='text', placeholder='Email')
input(type='Password', placeholder='Password')
input.button.tiny(type='submit', value='LOG IN')
small: em — or —
br
a.facebook.button.tiny(ng-click='user.loginWithFacebook()'): strong Log in with Facebook
hr
a Create an account
{{ user }}
a(ng-click="refreshUser()") refreshUser
编辑:我注意到,如果我再次点击“使用Facebook登录”,则会更新UI。不知道为什么。
编辑2:好吧,我想我暂时放弃并重新加载页面,所以我将$route.reload()
添加到$window.completeLogin
函数中,然后不重新加载页面,
但它会导致控制器更新。所以,问题已经解决了,但我真的很想了解这里发生了什么,如果可能的话,让它在没有添加的情况下工作。