从简单的javascript中使用AngularJS服务

时间:2015-08-10 13:30:42

标签: javascript jquery angularjs post sharepoint

我有一个main.js javascript文件,其中包含 init()函数。

我也有这个AngularJS服务:

(function () {

var app = angular.module('spContact', ['ngRoute']);

app.factory('spAuthService', function ($http, $q) {

    var authenticate = function (userId, password, url) {

        var signInurl = 'https://' + url + '/_forms/default.aspx?wa=wsignin1.0';
        var deferred = $q.defer();
        var message = getSAMLRequest(userId, password, signInurl);

        $http({
            method: 'POST',
            url: 'https://login.microsoftonline.com/extSTS.srf',
            data: message,
            headers: {
                'Content-Type': "text/xml; charset=\"utf-8\""
            }
        }).success(function (data) {
            getBearerToken(data, signInurl).then(function (data) {
                deferred.resolve(data);
            }, function (data) {
                deferred.reject(data)
            })
        });

        return deferred.promise;
    };

    return {
        authenticate: authenticate
    };

    function getSAMLRequest(userID, password, url) {
        return 'envelope';
    }

    function getBearerToken(result, url) {

        var deferred = $q.defer();
        var securityToken = $($.parseXML(result)).find("BinarySecurityToken").text();
        if (securityToken.length == 0) {
            deferred.reject();
        }
        else {
            $http({
                method: 'POST',
                url: url,
                data: securityToken,
                headers: {
                    Accept: "application/json;odata=verbose"
                }
            }).success(function (data) {
                deferred.resolve(data);
            }).error(function () {
                deferred.reject();
            });
        }

        return deferred.promise;
    }
});

})();

如何从主JavaScript文件的init()函数中调用此服务“authenticate”方法?

此服务应返回一些我需要进行数据查询的身份验证Cookie。

1 个答案:

答案 0 :(得分:0)

您需要将此工厂注入某些控制器/指令,例如:

app.controller('MyCtrl', ['spAuthService', function (spAuthService) {
    spAuthService.authenticate.then(function (data) { 
        // ...
    });
}]);

此控制器MyCtrl可以放在某个主页上,并由Angular自动引导。