所以我正在开发一个Ionic HTML5混合应用程序。我使用Firebase存储数据,并使用Auth0进行身份验证。一切都进行得很顺利,但我遇到了一个小问题,我似乎无法弄清楚,因为我对AngularJS的新鲜感。看来我应该在这里使用$apply,但是在这方面,文档是相当混乱的,我无法弄清楚。
我有一个视图,在这个视图中,我希望用户能够链接尚未链接到他们帐户的社交帐户。它的工作方式是检查哪些auth提供程序在该用户的配置文件中。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
}
})
};我知道很多这可能是在服务,但我正在移动的东西,试图使它正常工作。我应该在这里做什么?如何获得角度来监视auth.profile的更改?谢谢。
发布于 2015-08-26 07:37:36
正如您在这里看到的,当配置文件发生变化时,我们发出一个事件,然后在控制器上捕获它。如果删除事件捕捉器部件,则当单击按钮时,配置文件将发生更改,但$scope.profile值将不会被更新。
参见这个柱塞:示例柱塞
https://stackoverflow.com/questions/32219963
复制相似问题