Angular函数未在控制器中运行或绑定到$ scope变量

时间:2016-01-02 06:08:41

标签: javascript angularjs

我确信这很简单,但是我尝试了很多方法而没有结果。

我有一个工厂,可以从简单的端点/api/me检索配置文件数据。它应该返回名称,电子邮件等....它适用于我的个人资料页面。但是,我的导航栏似乎是另一回事。

navBarCtrl中的某些函数似乎会启动,但它只返回一个布尔值。我真正想要的功能似乎是惰性的。可能是因为它正在等待某种事件。

当auth服务检查用户是否经过身份验证时,我尝试使用广播,但这似乎也没有。

首先,Node API端点。可能没有必要,但以防万一。

app.get('/api/me', ensureAuthenticated, function(req, res) {
  User.findById(req.user, function(err, user) {
    res.send(user);
  });
});

帐户工厂。

 angular
    .module('issuefy')
    .factory('Account', Account);

  Account.$inject = ['$http', 'LocalStorage'];

  function Account($http, LocalStorage) {

    return {
          getUser: function() {
            return $http.get('/api/me');
          },
          updateProfile: function(profileData) {
            return $http.put('/api/me', profileData);
          }
        };

现在是控制器。请注意,我尝试以两种不同的方式做到这一点。

angular
      .module('issuefy')
      .controller('NavbarCtrl', NavbarCtrl);

    NavbarCtrl.$inject = ['$scope', '$http', '$location', 'LocalStorage', 'QueryService', '$auth', 'toastr', 'Account'];

    function NavbarCtrl($scope, $http, $location, LocalStorage, QueryService, $auth, toastr, Account) {

      $scope.getNavUser = function() {
        Account.getUser()
          .then(function(response) {
            $scope.userNav = response.data;
          })
          .catch(function(response) {
            toastr.error(response.data.message, response.status);
          });
      };

      $scope.$on('user-authenticated', function(event, args) {
        Account.getUser()
          .then(function(response) {
            $scope.userNav1 = response.data;
          })
          .catch(function(response) {
            toastr.error(response.data.message, response.status);
          });

});

      $scope.isAuthenticated = function() {
        return $auth.isAuthenticated();
      };
    }

现在是模板页面。

<div ng-controller="NavbarCtrl" class="navbar navbar-default navbar-static-top">
  <div class="navbar-header">
    <a class="navbar-brand" href="/"><i class="ion-ios7-pulse-strong"></i> Issuefy</a>
  </div>
  <ul class="nav navbar-nav">
    <li><a href="/#/">Home</a></li>
    <li ng-if="isAuthenticated()"><a href="/#/profile">Profile</a></li>
  </ul>
  <ul ng-if="!isAuthenticated()" class="nav navbar-nav pull-right">
    <li><a href="/#/login">Login</a></li>
    <li><a href="/#/signup">Sign up</a></li>
        {{user.name}}
  </ul>
  <ul ng-if="isAuthenticated()" class="nav navbar-nav pull-right">
    <li><a href="/#/logout">Logout</a></li>
        <li><a href="/#/logout"><span ng-bind="userNav.email"></span></a></li>
        <li><a href="/#/logout"><span ng-bind="userNav1.email"></span></a></li>
        <li>{{userNav1.email}}</li>
        <li>
            <div class="btn-group" uib-dropdown is-open="status.isopen">
          <button id="single-button" type="button" class="btn btn-primary" uib-dropdown-toggle ng-disabled="disabled">
            <i class="fa fa-user">a {{userNav.email}} email</i></span>
          </button>
          <ul class="uib-dropdown-menu" role="menu" aria-labelledby="single-button">
            <li role="menuitem"><a href="#">Action</a></li>
            <li role="menuitem"><a href="#">Another action</a></li>
            <li role="menuitem"><a href="#">Something else here</a></li>
            <li class="divider"></li>
            <li role="menuitem"><a href="#">Separated link</a></li>
          </ul>
        </div>
</li>
  </ul>
</div>

<div ui-view></div>

我错过了什么?我确信这很简单。

1 个答案:

答案 0 :(得分:0)

我想知道什么返回$auth.isAuthenticated();,是同步还是异步?如果它是异步的,则表达式isAuthenticated()可能返回错误的值。