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

Angular function not running in controller or binding to $scope variable

本文关键字:绑定 变量 scope 运行 函数 控制器      更新时间:2023-09-26

我相信这很简单,但我已经尝试了很多方法,但都没有结果。

我有一个工厂,它从一个简单的端点/api/me检索配置文件数据。它应该返回姓名、电子邮件等…它对我的个人资料页面很好。然而,我的导航栏似乎是另一回事。

navBarCtrl中的一些函数似乎起了作用,但它只是返回一个布尔值。我真正想参与的功能似乎是惰性的。这可能是因为它在等待某种事件。

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

首先,节点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>

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

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