Angularjs,函数未在控制器内正确调用

时间:2016-02-16 22:42:34

标签: javascript angularjs angularjs-directive

我正在进行此登录练习,用户可以登录和发布备注,并查看他们发布的备注。我的问题是当我注销并使用其他用户登录时,我看到了前一个用户的注释。

以下是插图:

https://gyazo.com/ddeae869673926047fd205a8edeb150b

我使用其他用户登录,然后显示:

https://gyazo.com/0a1905b88b5148be171a44d8876304d5

我重新启动页面并显示相应的注释:

https://gyazo.com/dcd199a41738ecd2ac9a85fe5832e51a

此控制器:

exports.homeController = function ($scope, $location, $q, $users, $window, $notes, $http) {
  var auth = function () {
    var userInfo = $users.getUserInfo()

    if (userInfo) {
      return $q.when(userInfo)
    } else {
      return $q.reject({ authenticated: false })
    }
  }

  $scope.userInfo = auth()

  myNotes($scope.userInfo.$$state.value.accessToken) // I invoke my function to get the notes for each specific user but it doesn't seem to work.

  $scope.logout = function () {
    $users.logout()
      .then(function (results) {
        $scope.userInfo = null
        $scope.myNotes = null
        $location.path('/')
      }, function (err) {
        console.log(err)
      })
  }

  $scope.notes = {
    notes: ''
  }

  $scope.postNote = function () {
    $notes.postNotes($scope.userInfo.$$state.value.accessToken, $scope.notes)
      .then(function (result) {
        $scope.myNotes.push($scope.notes)
        $scope.notes = ''
      }, function (err) {
        console.log(err)
      })
  }

  function myNotes (user_id) {
    $notes.getMyNotes(user_id)
      .then(function (result) {
        console.log(result)
        $scope.myNotes = result.data
      }, function (err) {
        console.log(err)
      })
  }
}

这是应用https://login-sys.herokuapp.com/

1 个答案:

答案 0 :(得分:1)

我找到了这些服务的非缩小代码。

基于此,我认为问题是您在var deferred = $q.defer()服务中声明$notes次。

我认为每次调用服务方法时都应该“更新”:

function getMyNotes (user_id) {
    var deferred = $q.defer();
    $http.get('/api/myNotes/' + user_id + '?access_token=' + user_id)
        .then(function (result) {
            deferred.resolve(result)
        }, function (err) {
            deferred.reject(err)
        });
    return deferred.promise
}

同样在postNotes

第二次使用相同的值返回相同的承诺时,尽管homeController服务发出新请求,但getMyNotes的{​​{1}}函数会得到相同的结果。< / p>

$notes服务的$userslogout功能中,您已正确使用它。