0

私はAngularJSアプリケーションに取り組んでおり、Angularを初めて使用し、必要なときにいつでも$rootScope利用できるように大きなオブジェクトをに設定し$scopeています。

この時点で、次のようになります。

Application.run(['$rootScope', function($rootScope) {

    $rootScope.Envato = {

        API : {

            Path : {
                Private : "/api/private/",
                Public : "/api/public/"
            },

            Methods : {

                Private : {

                    User : {

                        Vitals : $rootScope.Envato.API.Path.Private + "get-user-vitals.php",
                        Transactions : $rootScope.Envato.API.Path.Private + "get-earnings-and-sales-by-month.php",
                        Statement : $rootScope.Envato.API.Path.Private + "get-statement.php",
                        Sales : $rootScope.Envato.API.Path.Private + "get-recent-sales.php",
                        Account : $rootScope.Envato.API.Path.Private + "get-account-information.php"
                    },

                    Item : {

                        Purchase : {
                            Information : $rootScope.Envato.API.Path.Private + "get-purchase-information.php",
                            Download : $rootScope.Envato.API.Path.Private + "get-item-download-url.php"
                        }
                    }
                },

                Public : {

                    API : {

                        Releases : $rootScope.Envato.API.Path.Public + "get-api-releases.php"
                    },

                    Blog : {

                        Posts : $rootScope.Envato.API.Path.Public + "get-blog-posts.php",
                        Threads : {

                            Active : $rootScope.Envato.API.Path.Public + "get-active-threads.php",
                            Status : $rootScope.Envato.API.Path.Public + "get-thread-status.php"
                        },
                    },

                    Collections : $rootScope.Envato.API.Path.Public + "get-collections.php",

                    Items : {

                        Count : $rootScope.Envato.API.Path.Public + "get-number-of-items.php",
                        Popular : $rootScope.Envato.API.Path.Public + "get-popular-items.php",
                        Featured : $rootScope.Envato.API.Path.Public + "get-featured-items.php",

                        New : {

                            Marketplace : $rootScope.Envato.API.Path.Public + "get-new-items-from-market.php",
                            User : $rootScope.Envato.API.Path.Public + "get-new-items-from-user.php",
                            Random : $rootScope.Envato.API.Path.Public + "get-random-new-items.php"
                        },

                        Information : $rootScope.Envato.API.Path.Public + "get-item-information.php",
                        Prices : $rootScope.Envato.API.Path.Public + "get-item-prices.php"
                    },

                    Users : {

                        Total : $rootScope.Envato.API.Path.Public + "get-total-users-count.php",
                        Information : $rootScope.Envato.API.Path.Public + "get-user-information.php",
                        Items : {
                            Count : $rootScope.Envato.API.Path.Public + "get-user-items-by-site.php"
                        }
                    },

                    Search : $rootScope.Envato.API.Path.Public + "get-search-results.php"
                }
            }
        }
    };

    $rootScope.$safeApply = function($scope, fn) {

        fn = fn || function() {};

        if($scope.$$phase) {
            fn();
        } else {
            $scope.$apply(fn); 
        };
    };

}]);

しかし、これは混乱であり、それを行うためのより良い方法があるのか​​、あるいはAngularJSに同様のことを行うのに役立つ他の素晴らしいものがあるのではないかと思っていました:)

編集:明らかに、のようなもの$rootScope.Envato.API.Path.Privateは機能しませんが、私がやろうとしていることが何であるかを理解しやすいので、それを追加しました。

4

1 に答える 1

1

サービスを探しているようです。それらの作成方法については、AngularJS サイトのこのガイドを参照してください。

Application.factory('Envato', function() {
  return {
    API: {
      Path: { ... },
    }
  };
});

Application.controller('SomeController', function($scope, Envato) {
  $scope.thing = Envato.API...;
});
于 2013-02-11T17:37:49.187 に答える