どの提供者、サービスをご用意モジュールです。config?

StackOverflow https://stackoverflow.com//questions/12664787

  •  11-12-2019
  •  | 
  •  

質問

使用したいと思い$文書を掴むサーバーから値を入力します。

var base_url = $document[0].getElementById('BaseUrl').value;

子要素にサービスの基本urlを使用しむテンプレート。

var base_url = $document[0].getElementById('BaseUrl').value;

$routeProvider.when('/alert', {
  controller: function () { },
  templateUrl: base_url + '/partials/instances.html'
});

か$文書にするエラーで未知の私は推測でのご利用になれませんのconfig?があるのであるかを調べるとかありませんか?私も$httpからデータをサーバにそのこともございません。

役に立ちましたか?

解決

ANGULARJSモジュールは2フェーズでブートストラップされています:

  • プロバイダや定数だけが利用可能なConfiguration phase
  • 登録プロバイダに基づいてサービスがインスタンス化されているRun phase。この位相定数ではまだ利用可能ですが、プロバイダはありません。

    angularjs ドキュメント(セクション: "モジュールのロード&依存関係")はこれへの洞察を与えます:

    モジュールは、取得する構成と実行ブロックの集まりです。 ブートストラッププロセス中にアプリケーションに適用されます。その中で 最も簡単なフォームモジュールは2種類のブロックの集まりで構成されています。

    設定ブロック - プロバイダ登録中に実行される と構成段階。プロバイダと定数のみを注入できます 設定ブロックに。これは偶発的なインスタンス化を防ぐためです 完全に構成されている前のサービスの。

    ランブロック - Get インジェクタを作成した後に実行され、 応用。インスタンスと定数だけを実行に注入できます ブロック。これは、その後のシステム構成を防ぐためです アプリケーションの実行時間

    上記を考えると、定数とプロバイダを注入することしかできません(APIドキュメントのProviderサフィックスが付いています)。これはおそらくあなたの質問に答えていますが、テンプレートの読み込みの問題を解決するのに役立ちません...

    絶対パスを指定せずに単に基本タグを単に基本タグを使用してから(ベースに)単に相対パスを使用することはできませんか。 STHのような(ベースが正しく構成されている場合):

    $routeProvider.when('/alert', {
      controller: function () { },
      templateUrl: 'partials/instances.html'
    });
    
    .

他のヒント

この質問には答えが、ここにはちょっとほかのコンクリートに使用した例ですか

どの方角の定数を定義するbaseUrlの項を網(定義する定数を表すサーバーの値を供給することによって設定):

// file: app.js
'use strict';

/* App Module */
angular.module( 'myApp', [] )

  // define the templateBaseUrl
  .constant( 'templateBaseUrl', 'themes/angular/partials/' );

  // use it in configuration
  .config(['$routeProvider','templateBaseUrl', function($routeProvider,templateBaseUrl) {
    $routeProvider
      .when( '/posts', {
        templateUrl : templateBaseUrl + 'post-list.html',
        controller  : PostListCtrl
      })
      .when( '/posts/:postId-:slug', {
        templateUrl : templateBaseUrl + 'post-view.html',
        controller  : PostViewCtrl
      })
      .when( '/about', {
        templateUrl : templateBaseUrl + 'about.html',
        controller  : AboutPageCtrl
      })
      .when( '/contact', {
        templateUrl : templateBaseUrl + 'contact.html',
        controller  : ContactPageCtrl
      })
      .otherwise({
        redirectTo: '/posts'
      })
    ;
  }]);

私の考えでは、この複数の特典:

  • 移動した場合は望まみを更新する必要があるコードを単一の位置
  • ご項を網に深く入れ子内プロジェクトのレイアウト、"templateBaseUrl"など正当な理由がたくさんのノイズとしての経路が
  • あなたの最大の変化の間の相対的-絶対パス
  • 回答を類似の問題 を利用すること、html base要素の削除を必要とするprepending、baseUrl各templateUrl.も影響を受けその他の資源のです。設定のみのベースurlのためのテンプレートには副作用はありません

一般的には利用しないこのソリューションは、ハードコードされた値ようにする。これはあくまでも一例で示すかの最も簡単です。できるファイルをコピーしのアプリ周辺の設定値以外app.jsは、インデックスファイルを生成し必要なpathesサーバ側:

// file: index.php
<?php
  // only depends on your project layout
  $angularPartialsBaseUrl = 'themes/angular/partials/';
  // this will change when you move the app around on the server
  $themeBaseUrl  = $_SERVER['REQUEST_URI'] . 'themes/angular';
?><!DOCTYPE html>
<html ng-app="myApp">
<head>
    <title>Yii Blog Demo</title>

    <script>
      var myNS = myNS || {};
      myNS.appConfig = myNS.appConfig || {};
      myNS.appConfig.templateBaseUrl = '<?php echo $angularPartialsBaseUrl; ?>';
    </script>

    <script src="<?php echo $themeBaseUrl; ?>/js/vendor/angular/angular.js"></script>
    <script src="<?php echo $themeBaseUrl; ?>/js/app.js"></script>

</head>

[...]

やapp.js:

// file: app.js
'use strict';

/* App Module */
angular.module( 'myApp', [] )

  // define the templateBaseUrl using external appConfig
  .constant( 'templateBaseUrl', myNS.appConfig.templateBaseUrl );
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top