AngularJS:服务不更新

时间:2014-08-28 00:03:37

标签: angularjs coffeescript sails.js angular-services

我是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函数中,然后不重新加载页面, 但它会导致控制器更新。所以,问题已经解决了,但我真的很想了解这里发生了什么,如果可能的话,让它在没有添加的情况下工作。

0 个答案:

没有答案