簡體   English   中英

Angular函數未在控制器中運行或未綁定到$ scope變量

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

我相信這很簡單,但是我已經嘗試了很多方法,但沒有結果。

我有一家工廠,可以從簡單的端點/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>

我想念什么? 我相信這很簡單。

我想知道什么返回$auth.isAuthenticated(); ,是同步還是異步? 如果它是異步的,則表達式isAuthenticated()可能返回錯誤的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM