Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
观察angularJS外部的变量_Angularjs_Ionic_Auth0 - Fatal编程技术网

观察angularJS外部的变量

观察angularJS外部的变量,angularjs,ionic,auth0,Angularjs,Ionic,Auth0,所以我正在开发一款离子HTML5混合应用程序。我正在使用Firebase存储数据,并使用Auth0进行身份验证。一切都进行得很顺利,但我遇到了一个小问题,我似乎无法弄清楚,因为我对安格拉斯很陌生。看起来我应该在这里使用$apply,但是文档在这方面非常混乱,我无法理解 我有一个视图,希望用户能够链接尚未链接到其帐户的social auth帐户。它的工作原理是检查哪些身份验证提供程序在该用户的配置文件中。HTML格式如下: <ion-view title="Account"> &l

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

我有一个视图,希望用户能够链接尚未链接到其帐户的social 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>

添加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文档链接:太好了,正是我需要的。谢谢!