1. ホーム
  2. angularjs

AngularJSで、定数を他の定数で定義する方法はありますか?

2023-09-26 09:04:53

質問

定数を他の定数で定義しようとしているのですが、必要な定数が必要とするときに初期定数が準備できていないため、定義できないようです。私はこれが全く不可能であるかどうかを確認したいです。

現在、私はこの方法で定数を持っています。

angular.module('mainApp.config', [])
    .constant('RESOURCE_USERS_DOMAIN', 'http://127.0.0.1:8008')
    .constant('RESOURCE_USERS_API', 'http://127.0.0.1:8008/users')
    // Specific routes for API
    .constant('API_BASIC_INFORMATION', RESOURCE_USERS_API + '/api/info')
    .constant('API_SOCIAL_NETWORKS', RESOURCE_USERS_API + '/api/social')
    ;

2番目の2つの定数は、私が実現したいことです。

どのように解決するのですか?

AngularJSでは、コントローラやサービスなどの依存関係を定義する方法として、依存性注入(DI)があります。つまり、サービスBに依存するコントローラAがある場合、次のように作成する必要があります。

var myApp = angular.module("exampleApp",[]);

myApp.controller("aCtrl", function(serviceB){
    // Controller functionally here
});

ほら、AngularJSはserviceBの依存関係をチェックして、その名前で作成したサービスを探します。もし、作成していなければ、エラーが発生します。

ですから、定数Bに依存する定数Aを作りたい場合、AはBに依存しているとAngularに伝える必要があります。定数は関数を返すことができますが、DIは定数のために動作しません。これを見てください フィドル で、どのメソッドに対してDIが効くか確認できます。

というわけで、質問に答えると、定数を他の定数で定義することはできない。

でも、こんなことはできます。

angular.module('projectApp', [])
  .constant('domain', 'http://somedomain.com')
  .constant('api', '/some/api/info')
  .service('urls', function(domain, api) {this.apiUrl = domain + api;})

  .controller('mainCtrl',function($scope,urls) {

      $scope.url = urls.apiUrl;

  });

これを確認する フィドル で動作を確認してください。

DIについてもっと理解したい場合は、以下を参照してください。 ポスト .