微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

依赖注入 – 将JS JS SDK注入AngularJS控制器

我正在为Angular创建一个Facebook服务,所以我可以更容易地测试需要使用Facebook JS SDK和Graph API的代码.

这是我到目前为止

app.factory('facebook',function() {
    return FB;
});

window.fbAsyncInit = function () {
    FB.init({
        appId: 'SOME_APP_ID_HERE',// App ID
        status: true,// check login status
        cookie: true,// enable cookies to allow the server to access the session
        xfbml: true,// parse XFBML
        oauth: true
    });
};

// Load the SDK Asynchronously
(function (d) {
    var js,id = 'facebook-jssdk',ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) { return; }
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js,ref);
})(document);

现在,我知道实际的Facebook SDK部分正在运行…但在我的控制器中,引用始终为空.

在我的控制器我只是有这样的东西:

function FooCtrl($scope,facebook) {
    facebook.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            var uid = response.authResponse.userID;
            var accesstoken = response.authResponse.accesstoken;
            // do something
        } else if (response.status === 'not_authorized') {
            // the user is logged in to Facebook,// but has not authenticated your app
        } else {
            // the user isn't logged in to Facebook.
        }
    });
}

然后,角色抓住它找不到一个FacebookProvider.有什么想法可以如何实现?

用下面的数组括号括起你的工厂功能
app.factory('facebook',[function() {
    return FB;
}]);

api文档不够清楚.具有数组括号的点是可以指定依赖关系.将使用AUTO.$injection注入您的服务创建.但是由于你没有依赖关系,所以它会跳过这个任务:)

无论如何,如果你需要依赖,你可以这样请求他们

app.factory('facebook',["$log",function($someCrazyLoggerService){
    $someCrazyLoggerService.log("I'm Auto Injected crazy Logger");
}]);

原文地址:https://www.jb51.cc/javaschema/281839.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐