Dor*_*hen 29 javascript angularjs angularjs-service
我有以下angularjs服务:
angular.module('app.main').factory('MyService', ["$http", function ($http) {
return new function () {
this.GetName = function () {
return "MyName";
};
};
}]);
Run Code Online (Sandbox Code Playgroud)
如何从遗留的js代码中调用GetName函数MyService?
小智 44
使用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();
Run Code Online (Sandbox Code Playgroud)
这是jsfiddle:http://jsfiddle.net/wGeNG/
注 - 在加载自定义模块之前,需要添加"ng"作为第一个模块,因为示例代码依赖于ng模块中的$ http提供程序.
编辑 - get()在OP的答案中使用,但请注意,此代码在不依赖于绑定到app模块"main.app"的元素的情况下获取服务.
小智 17
对我来说它适用于:
angular.element(document.body).injector().get("MyService")
Run Code Online (Sandbox Code Playgroud)
尝试这个时,我收到了"未知提供商"错误:
angular.injector(['ng', 'main.app']).get("MyService")
Run Code Online (Sandbox Code Playgroud)
而我正在使用jqLite,我做不到
angular.element('*[ng-app]')
Run Code Online (Sandbox Code Playgroud)
因为jqLite不支持选择器,但我得到了[Dor Cohen]的想法.我的指令ng-app在我的身体标签上,然后我可以使用:
angular.element(document.body).injector().get("MyService")
Run Code Online (Sandbox Code Playgroud)
要么
angular.element(document).find('body').injector().get("MyService")
Run Code Online (Sandbox Code Playgroud)
Dor*_*hen 15
使用以下行有助于从angularjs服务执行我的方法:
angular.element('*[ng-app]').injector().get("MyService").GetName ();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23319 次 |
| 最近记录: |