从简单的js代码调用angularjs服务

时间:2013-06-26 12:17:36

标签: javascript angularjs angularjs-service

我有以下angularjs服务:

angular.module('app.main').factory('MyService', ["$http", function ($http) {
    return new function () {

        this.GetName = function () {
            return "MyName";
        };
    };
}]);

如何从旧版js代码中调用GetName MyService函数?

4 个答案:

答案 0 :(得分:43)

使用angular.injector。使用您的代码,您可以执行以下操作:

angular.module('main.app', []).factory('MyService', ['$http', function ($http) {
    return new function () {

        this.GetName = function () {
            return "MyName";
        };
    };
}]);


angular.injector(['ng', 'main.app']).get("MyService").GetName();

这是jsfiddle:http://jsfiddle.net/wGeNG/

注意 - 在加载自定义模块之前,您需要添加“ng”作为第一个模块,因为您的示例代码依赖于ng模块中的$ http提供程序。

编辑 - 在OP的回答中使用get() 请注意,此代码在不依赖于绑定到应用模块“main”的元素的情况下获取服务的.app”。

答案 1 :(得分:15)

使用以下行有助于从angularjs服务执行我的方法:

angular.element('*[ng-app]').injector().get("MyService").GetName ();

答案 2 :(得分:15)

对我来说,它适用于:

angular.element(document.body).injector().get("MyService")

我得到了“未知提供商”#39;尝试这个时出错:

angular.injector(['ng', 'main.app']).get("MyService")

当我使用jqLit​​e时,我无法做到

angular.element('*[ng-app]')

因为jqLit​​e不支持选择器,但我得到了[Dor Cohen]的想法。我的指令ng-app在我的身体标签上,然后我可以使用:

angular.element(document.body).injector().get("MyService")

angular.element(document).find('body').injector().get("MyService")

答案 3 :(得分:0)

这是我使用的实用方法:

private boolean isAuthListenerSet = false;

private FirebaseAuth.AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            //User is signed in
        } else {
            //User is signed out - insert your logic here
        }
    }
};

@Override
protected void onStart() {
    super.onStart();
    if (!isAuthListenerSet) {
        FirebaseAuth.getInstance().addAuthStateListener(mAuthListener);
        isAuthListenerSet = true;
    }
}

 @Override
protected void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        FirebaseAuth.getInstance().removeAuthStateListener(mAuthListener);
        isAuthListenerSet = false;
    }
}

function getService(name, element) { element = element || '*[ng-app]'; return angular.element(element).injector().get(name); } 体)