1

所以我正在开发一个 Ionic HTML5 Hybrid 应用程序。我正在使用 Firebase 存储数据并使用 Auth0 进行身份验证。一切都进行得非常顺利,但我遇到了一些我似乎无法弄清楚的小问题,因为我对 AngularJS 很陌生。看来我应该在这里使用 $apply ,但是在这方面文档非常混乱,我无法弄清楚。

我有一个视图,我希望用户能够链接尚未链接到其帐户的社交身份验证帐户。它通过检查哪些身份验证提供者在该用户的个人资料中来工作。HTML 如下:

<ion-view title="Account">
  <ion-content class="has-header padding">
    <button class="button button-block button-positive icon-left icon ion-social-facebook" ng-if="facebookCheck() == false" ng-click="linkFacebook()"> Add Facebook Account</button>
    <button class="button button-block button-calm icon-left icon ion-social-twitter" ng-if="twitterCheck() == false" ng-click="linkTwitter()"> Add Twitter Account</button>
    <button class="button button-block button-dark icon-left icon ion-social-instagram" ng-if="instagramCheck() == false" ng-click="linkInstagram()"> Add Instagram Account</button>
    <br>  
    <button class="button button-assertive button-block" ng-click="logout()">Logout</button>
  </ion-content>
</ion-view>

这里是控制器。如果您注销或关闭应用程序并重新打开,这完全符合我的要求,但我希望它监视 auth.profile 中的更改,因此在用户登录到可用提供程序之一并返回视图后,按钮使用该提供商登录将从视图中消失。

.controller('AccountCtrl', function($scope, auth, $state, store) {

  $scope.logout = function() {
    auth.signout();
    store.remove('token');
    store.remove('profile');
    store.remove('refreshToken');
    $state.go('login');
  }

  $scope.profile = auth.profile;

  $scope.facebookCheck = function() {
     for (i = 0; i < $scope.profile.identities.length; i++) {
        if (angular.equals($scope.profile.identities[i].provider, "facebook")) {
                     return true;
        }
    }

    return false;
};

   $scope.twitterCheck = function() {
     for (i = 0; i < $scope.profile.identities.length; i++) {
        if (angular.equals($scope.profile.identities[i].provider, "twitter")) {
                     return true;
        }
    }

    return false;
};

   $scope.instagramCheck = function() {
     for (i = 0; i < $scope.profile.identities.length; i++) {
        if (angular.equals($scope.profile.identities[i].provider, "instagram")) {
                     return true;
        }
    }

    return false;
};

  $scope.linkTwitter = function () {
    var lock = new Auth0Lock('ywxuAvQN38sQqiiwYz3CJ3IsPUiEg94x', 'fanzee.auth0.com');

    lock.show({
      dict: {
        signin: {
          title: 'Link another account'
        }
      },
      connections: ['twitter'],
      authParams: {
        access_token: auth.accessToken
      }
    })
};

  $scope.linkFacebook = function () {
    var lock = new Auth0Lock('ywxuAvQN38sQqiiwYz3CJ3IsPUiEg94x', 'fanzee.auth0.com');

    lock.show({
      dict: {
        signin: {
          title: 'Link another account'
        }
      },
      connections: ['facebook'],
      authParams: {
        access_token: auth.accessToken
      }
    })
};

  $scope.linkInstagram = function () {
    var lock = new Auth0Lock('ywxuAvQN38sQqiiwYz3CJ3IsPUiEg94x', 'fanzee.auth0.com');

    lock.show({
      dict: {
        signin: {
          title: 'Link another account'
        }
      },
      connections: ['instagram'],
      authParams: {
        access_token: auth.accessToken
      }
    })
};

我知道其中很多都可能在服务中,但我正在四处移动以尝试使其正常工作。我应该在这里做什么?如何让 Angular 监视 auth.profile 的更改?谢谢。

4

1 回答 1

0

正如您在此处看到的,我们在配置文件更改时发出一个事件,然后我们在控制器上捕获它。如果我们删除事件捕获器部分,当我们单击按钮时配置文件将更改,但$scope.profile值不会更新。

请参阅此 Plunker:示例 Plunker

于 2015-08-26T07:37:36.627 回答