4

head のタグにいくつかのグローバル変数があります。

<script type="text/javascript">
    var apiRoot = 'http://localhost:8000/api',
        apiUrl = apiRoot,
        apiBadgeUrl = apiRoot + '/badges',
        apiLevelUrl = apiRoot + '/levels',
        apiBehaviorUrl = apiRoot + '/behaviors',
        apiTrophyUrl = apiRoot + '/trophies',
        apiUserUrl = apiRoot + '/users',
        apiWidgetPreferencesUrl = apiRoot + '/widgetPreferences';
</script>

HTMLファイルの角度表現で使用したいのですが、私の試みは失敗します:

{{ $window.apiRoot }} or {{ apiRoot }} 
4

3 に答える 3

6

これらの式は、現在のスコープに対して評価されます。コントローラーを介してスコープに設定していない場合、評価されません。http://docs.angularjs.org/guide/expressionを参照してください

例:

function MyCtrl($scope)
{
   $scope.apiRoot = apiRoot;
}

HTML:

<div ng-controller="MyCtrl">
   {{apiRoot}}
</div>

前述のように、上記の例は機能しますが、推奨されません。より良い方法は、これらの変数をサービスで設定してから、サービスを介して取得することです。

function MyCtrl($scope, apiRootService)
{
   $scope.apiRoot = apiRootService.getApiRoot();
}

サービス:

angular.module('myServices', []).factory('apiRootService', function() {
    var apiRoot = 'http://localhost:8000/api',
    apiUrl = apiRoot,
    apiBadgeUrl = apiRoot + '/badges',
    apiLevelUrl = apiRoot + '/levels',
    apiBehaviorUrl = apiRoot + '/behaviors',
    apiTrophyUrl = apiRoot + '/trophies',
    apiUserUrl = apiRoot + '/users',
    apiWidgetPreferencesUrl = apiRoot + '/widgetPreferences';
    return {
      getApiRoot: function() {
         return apiRoot
      },
      //all the other getters
   });
于 2012-10-05T15:13:39.140 に答える
1

ベスト プラクティスは、apiRoot を Service に移動し、そのサービスをコントローラーに挿入することです。ここを参照してください。

于 2012-10-05T16:33:48.007 に答える
0

これを行う別の方法は、グローバルを $rootScope に追加することです。これを行うには、アプリ モジュール定義に以下を追加します。

angular.module('myApp', ['ngRoute'])
    .run(function ($rootScope){
        $rootScope.myAPI = {
             apiRoot: 'http://localhost:8000/api',
             apiUrl: apiRoot,
             apiBadgeUrl: apiRoot + '/badges',
             apiLevelUrl: apiRoot + '/levels',
             apiBehaviorUrl: apiRoot + '/behaviors',
             apiTrophyUrl: apiRoot + '/trophies',
             apiUserUrl: apiRoot + '/users',
             apiWidgetPreferencesUrl: apiRoot + '/widgetPreferences'
        }
    });


サービスは機能しますが、Angular のドキュメントではこれを推奨していません。http://docs.angularjs.org/misc/faq

逆に、データのビットを保存して返すことだけを目的とするサービスを作成しないでください。

于 2013-11-15T20:07:23.340 に答える