观察angularJS外部的变量
所以我正在开发一款离子HTML5混合应用程序。我正在使用Firebase存储数据,并使用Auth0进行身份验证。一切都进行得很顺利,但我遇到了一个小问题,我似乎无法弄清楚,因为我对安格拉斯很陌生。看起来我应该在这里使用$apply,但是文档在这方面非常混乱,我无法理解 我有一个视图,希望用户能够链接尚未链接到其帐户的social auth帐户。它的工作原理是检查哪些身份验证提供程序在该用户的配置文件中。HTML格式如下:观察angularJS外部的变量,angularjs,ionic,auth0,Angularjs,Ionic,Auth0,所以我正在开发一款离子HTML5混合应用程序。我正在使用Firebase存储数据,并使用Auth0进行身份验证。一切都进行得很顺利,但我遇到了一个小问题,我似乎无法弄清楚,因为我对安格拉斯很陌生。看起来我应该在这里使用$apply,但是文档在这方面非常混乱,我无法理解 我有一个视图,希望用户能够链接尚未链接到其帐户的social auth帐户。它的工作原理是检查哪些身份验证提供程序在该用户的配置文件中。HTML格式如下: <ion-view title="Account"> &l
<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>
添加Facebook帐户
添加Twitter帐户
添加Instagram帐户
注销
这是控制器。如果您注销或关闭应用程序并重新打开,这与我希望的完全一样,但我希望它监视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
}
})
};
.controller('AccountCtrl',函数($scope、auth、$state、store){
$scope.logout=函数(){
auth.signout();
store.remove('token');
存储。删除(“配置文件”);
删除('refreshToken');
$state.go('login');
}
$scope.profile=auth.profile;
$scope.facebookCheck=函数(){
对于(i=0;i<$scope.profile.identies.length;i++){
if(angular.equals($scope.profile.identies[i].provider,“facebook”)){
返回true;
}
}
返回false;
};
$scope.twitterCheck=函数(){
对于(i=0;i<$scope.profile.identies.length;i++){
if(angular.equals($scope.profile.identies[i].provider,“twitter”)){
返回true;
}
}
返回false;
};
$scope.instagramCheck=函数(){
对于(i=0;i<$scope.profile.identies.length;i++){
if(angular.equals($scope.profile.identifications[i].provider,“instagram”)){
返回true;
}
}
返回false;
};
$scope.linkTwitter=函数(){
var lock=newauth0lock('ywxuAvQN38sQqiiwYz3CJ3IsPUiEg94x','fanzee.auth0.com');
锁定显示({
格言:{
签名:{
标题:“链接其他帐户”
}
},
连接:['twitter'],
authParams:{
访问令牌:auth.accessToken
}
})
};
$scope.linkFacebook=函数(){
var lock=newauth0lock('ywxuAvQN38sQqiiwYz3CJ3IsPUiEg94x','fanzee.auth0.com');
锁定显示({
格言:{
签名:{
标题:“链接其他帐户”
}
},
连接:['facebook'],
authParams:{
访问令牌:auth.accessToken
}
})
};
$scope.linkInstagram=函数(){
var lock=newauth0lock('ywxuAvQN38sQqiiwYz3CJ3IsPUiEg94x','fanzee.auth0.com');
锁定显示({
格言:{
签名:{
标题:“链接其他帐户”
}
},
连接:['instagram'],
authParams:{
访问令牌:auth.accessToken
}
})
};
我知道在一项服务中可能会有很多这样的情况,但我一直在努力让它正常工作。我应该在这里做什么?我该如何观察auth.profile的更改?谢谢。正如您在这里看到的,当配置文件更改时,我们会发出一个事件,然后在控制器上捕获它。如果我们删除该事件catcher部分,当我们单击该按钮时,配置文件将更改,但不会更新
$scope.profile
值
查看此插件:正如您在此处所看到的,当配置文件更改时,我们会发出一个事件,然后在控制器上捕获它。如果我们删除事件捕获程序部分,则当我们单击按钮时,配置文件将更改,但不会更新
$scope.profile
值
查看此Plunker:请创建plunkar或fiddle我不确定如何在这种情况下创建功能性Plunker/fiddle/codepen,但不包括一些详细信息我不太习惯使用Auth0中包含的当前安全规则在此处发布。如果不清楚,auth.profile对象将在Angular之外由Aut更新h0服务,我试图确保Angular监视该对象中的更改,以便在函数检查auth时使用下面的服务(facebookCheck()、twitterCheck()等)在profile.identies上迭代,该对象将是最新的。为什么不使用事件发射器?当auth.profile更改时,您可以发出一个事件,并且在控制器中您可以收听它。请创建plunkar或fiddle我不确定在这种情况下如何创建功能性plunker/fiddle/codepen,而不包括一些细节我不太清楚使用我在Auth0中包含的当前安全规则在此处发布时感到舒适。如果不清楚,auth.profile对象将由Auth0服务在Angular之外进行更新,我正在尝试确保Angular监视该对象中的更改,以便在检查auth的函数与下面的服务(facebookCheck(),twitterCheck()一起)时(等)迭代profile.identies,该对象将是最新的。为什么不使用事件发射器?当auth.profile更改时,您可以发出一个事件,并且在控制器中您可以收听该事件。此操作非常有效。谢谢!我在文档中很难找到有关发射器的信息。您能为我指出正确的学习方向吗更多信息?你应该在scope文档中找到它,这里是listener文档链接:太好了,正是我需要的。谢谢!这很好用。谢谢!我在文档中很难找到有关发射器的信息。你能告诉我正确的方向来了解更多信息吗?你应该在scope文档中找到它,这里是listener文档链接:太好了,正是我需要的。谢谢!