AngularJS:将实用程序方法分离为可重用服务

时间:2014-05-20 00:47:48

标签: angularjs

我正在尝试使用可以从AngularJS中的模块调用的方法来定义服务。 这是我第一次尝试使用AngularJS。 也许这不是一个很好的方法,但我认为我可以将一些辅助方法放入一个可以重复使用的服务中。

但我发现模块中没有UrlHelperService。

我试图简化并提取正在使用的三个文件的骨架:

app.js

angular.module('myApp', ['ngRoute', 'myMod', 'UrlHelperService']);

urls.js

var serv = angular.module('UrlHelperService', []);
serv.service( "UrlHelperService",
              function aaMethod( ) {
                 this.urlHelp = function( url, aa ) {
                     return url;
                 }
               }
            );

module.js

var module = angular.module( "myMod", [] );
module.factory(
    "myMod",
    [ "$http", "$q", "UrlHelperService",
                function myModFactory( $http, $q, UrlHelperService) {
                    // UrlHelperService isn't available here.  Why?
                    return;
                }]);

1 个答案:

答案 0 :(得分:2)

好吧,如果您想将UrlHelperService与myMod一起使用,则需要将其声明为myMod中的依赖项(就像在myApp中一样)。

var module = angular.module( "myMod", [
    "UrlHelperService"
]);
module.factory(
    "myMod", [
        "$http",
        "$q",
        "UrlHelperService",
        function myModFactory( $http, $q, UrlHelperService) {
            // UrlHelperService isn't available here.  Why?
            return;
        }
    ]);

但它可能更简单。您正在创建myMod模块和myMod服务(.factory类似于.service),为什么?

无论如何,将这些帮助函数放在可以重用的服务中是绝对正确的。尽管如此,它并不是顶级的。或许更简单的方法就足够了。例如:

angular
    .module('myApp', [
        'ngRoute'
    ])
    .factory('UrlHelperService', [
        function UrlHelperService() {
            return {
                urlHelp: function(url, aa) {
                    return url;
                }
            };
        }
    ]);

在这里,您有app(自己的模块)和myApp内其他人可用的服务。有时某个服务的单独模块等更好,有时主模块内的服务就足够了。