gpt4 book ai didi

angularjs - 将 MobileServiceClient 与 AngularJS 集成

转载 作者:行者123 更新时间:2023-12-04 23:03:58 26 4
gpt4 key购买 nike

我正在尝试使用 Angular 中的 WindowsAzure.MobileServiceClient 来执行单点登录和 CRUD 操作。作为一个 Angular 菜鸟,我试图找出最好的方法来做到这一点:

  • 在 .run 中的 $rootScope 中实例化它并从那里调用函数?
  • 创建一个服务或工厂并实例化 MobileServiceClient 和其中的所有函数调用?不使用服务/工厂时,currentUser 和其他信息会丢失吗?
  • 只是在需要它的 Controller 中建立 MobileServiceClient 吗?在我看来,如果我这样做,currentUser 信息会丢失吗?

  • 我已经尝试使用上述一些方法,但遇到了一些问题:
  • 调用登录方法如Azure docs有时有效,有时它不会像它应该的那样向身份验证提供程序显示弹出窗口。我已从身份验证提供程序注销,因此应显示一个弹出窗口,但没有显示,
  • 无论我尝试做什么,MobileServiceClient currentUser 都会返回 null,即使显示了弹出窗口并且我正确输入了我的凭据。

  • 关于我可以做些什么来使这项工作顺利进行的任何想法?我可以在某处遵循任何示例吗?文档似乎很粗略。

    我正在使用 Yeoman 和 Angular 生成器以及 Grunt 来完成我的工作,如果有什么不同的话。

    最佳答案

    我能够弄清楚。我创建了一个新服务来处理所有移动服务代码。由于来自客户端的方法是异步的,因此我在方法中使用了回调。我还使用 cookie 存储来保存用户的凭据对象 (currentUser) 并在需要时再次将其拉出。 currentUser 似乎在调用之间丢失了用户凭据对象,所以我将它存储在一个 cookie 中,并在它丢失时将它推送到客户端。

    'use strict';

    angular.module('{appName}')
    .factory('AzureMobileClient', ['$cookieStore', function ($cookieStore) {

    var azureMobileClient = {};
    azureMobileClient.isLoggedIn = false;
    azureMobileClient.azureError = "";
    azureMobileClient.azureMSC = new WindowsAzure.MobileServiceClient('{app URL from Azure}', '{app key from Azure}');

    azureMobileClient.login = function(callback, socialMediaService) {

    azureMobileClient.azureMSC.login(socialMediaService).then(function(user) {
    azureMobileClient.isLoggedIn = user != null;
    $cookieStore.put("azureUser", user);
    callback(azureMobileClient.isLoggedIn);
    }
    , function(error){
    alert(error);

    azureMobileClient.azureError = error;
    });
    };

    azureMobileClient.logout = function() {
    azureMobileClient.getUser();
    azureMobileClient.azureMSC.logout();
    $cookieStore.remove("azureUser");
    };

    azureMobileClient.getStuff = function(callback) {
    azureMobileClient.getUser();

    var stuffTable = azureMobileClient.azureMSC.getTable("stuff");

    stuffTable.read().then(function(items) {
    callback(items);
    });
    };

    azureMobileClient.addStuff = function(scope) {
    azureMobileClient.getUser();
    var stuffTable = azureMobileClient.azureMSC.getTable("stuff");
    stuffTable.insert({ stuffname: scope.stuffname });
    };

    azureMobileClient.getUser = function() {
    if (azureMobileClient.azureMSC.currentUser === null)
    {
    azureMobileClient.azureMSC.currentUser = $cookieStore.get("azureUser");
    }
    };

    return azureMobileClient;
    }]);

    在执行登录和注销的 Controller 中,我这样做:
    'use strict';

    angular.module('{appName}')
    .controller('MainCtrl', function ($scope, $window, AzureMobileClient) {

    $scope.authenticate = function (socialService) {

    AzureMobileClient.login(function(isLoggedIn) {
    if (isLoggedIn)
    {
    $window.location.href = "/#/play";
    }
    }, socialService);
    };

    $scope.signOut = function() {
    AzureMobileClient.logout();
    }
    });

    登录/注销 Controller 的 View 如下所示:
    <button ng-click="signOut()">Sign Out</button> 
    <div class="span4">
    <img src="images/facebooklogin.png" ng-click="authenticate('Facebook')" />
    <img src="images/twitterlogin.png" ng-click="authenticate('Twitter')" />
    <img src="images/googlelogin.png" ng-click="authenticate('Google')" />
    </div>

    最后在获取数据的 Controller 中,我这样做:
    'use strict';

    angular.module('{appName}')
    .controller('StuffCtrl', ['$scope', '$window', 'AzureMobileClient', function ($scope, $window, AzureMobileClient) {

    AzureMobileClient.getStuff(function(items) {

    if (items.length == 0)
    {
    $window.location.href = "/#/stuff/new";
    }
    else
    {
    $scope.$apply($scope.items = items);
    }

    });
    }]);

    关于angularjs - 将 MobileServiceClient 与 AngularJS 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16673003/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com