82

私は Angular.js を学び始めたばかりで、Angular ホームページの「バックエンドを接続する」の例で project.js を見てきました。

コントローラー関数のパラメーターについて混乱しています。

function ListCtrl($scope, Projects) {
  ... 
}   

function CreateCtrl($scope, $location, $timeout, Projects) {
  ... 
}

function EditCtrl($scope, $location, $routeParams, angularFire, fbURL) {
   angularFire(fbURL + $routeParams.projectId, $scope, 'remote', {}).
   then(function() {
     ...
   });
}  

これらのコントローラー関数は routeProvider で呼び出されますが、パラメーターは指定されていません。

$routeProvider.
  when('/', {controller:ListCtrl, templateUrl:'list.html'}).
  when('/edit/:projectId', {controller:EditCtrl, templateUrl:'detail.html'}).
  when('/new', {controller:CreateCtrl, templateUrl:'detail.html'}).
  otherwise({redirectTo:'/'});
});

これまでのところ、何が起こっているのかを説明している可能性のある唯一のものは、「Injecting Services Into Controllers」です。$location$timeoutangularFirefbURL

私の具体的な質問は次のとおりです。

  1. コントローラのパラメータは何ですか?

  2. パラメータを使用して呼び出されるコントローラ関数はどこにありますか? または、パラメーターは呼び出されませんが、多くの Angular.js マジックで関連付けが発生するコントローラーに関連付けられているだけです (そうであれば、github でソース コードを確認できますか)。

  3. どこでangularFire定義されていますか?

  4. パラメータfbURL内のリンクは次のとおりです。

    angular.module('project', ['firebase']).
        value('fbURL', 'https://angularjs-projects.firebaseio.com/').
        factory ...
    
  5. Angular.js が提供する$locationや などのすべてのサービスを確認できる場所はありますか? $timeout(リストを見つけようとしましたが失敗しました。)

4

4 に答える 4

1

パラメータを使用して呼び出されるコントローラ関数はどこにありますか?

コントローラー関数は、ngControllerディレクティブを使用してインスタンス化されるか、または を使用してルート作成中にコントローラーを指定した場合にインスタンス化されます$routeProvider。AngularJS はこれを透過的に行い、 を使用してコントローラーで定義したパラメーターを注入しますDI

DI は、パラメーターの名前 (場合によっては順序) を一致させることによって機能します。したがって$scope、現在のスコープ$httpを取得し、http サービスを取得します

于 2013-10-08T03:59:05.560 に答える
1

toxaqのコメントによると、ここに回答としてのコメントがあります

  1. コントローラのパラメータは何ですか?

    ほとんどの場合、ルート定義で解決を使用する前にどこかで定義したサービス、ファクトリ、値、定数などです。

  2. パラメータを使用して呼び出されるコントローラ関数はどこにありますか?

    コントローラーを定義する適切な方法は次のとおりです。

    angular.module('project').controller('EditCtrl', [
        '$scope', 
        '$location', 
        '$routeParams', 
        'angularFire', 
        'fbURL', 
        function($scope, $location, $routeParams, angularFire, fbURL) { 
            ... 
        } 
    ]); 
    

    このようにして、最初に挿入するサービスの名前を設定し、必要に応じてそれらのサービスに別の名前を付けます。実際、後でAngularコードを最小化する場合、これは必須です(最小化により変数の名前が変更されるため、Angularは引き続きサービス名を見つけることができる必要があります)。

  3. angularFireはどこで定義されていますか?

    プロジェクト モジュールを定義したときに、firebase モジュールの依存関係も含めました。firebase モジュールの内部には、前の fbURL のような angularFire サービスが必要です。

  4. パラメータの fbURL はどのようにリンクされていますか

    あなたが理解しているように、コントローラーのパラメーターは、コントローラーの定義からAngularによって注入されています。Angular は登録されているすべてのサービスを調べ、指定されたパラメーター名と一致するものを見つけて、それに応じたサービスを挿入しようとします。

  5. $location や $timeout など、Angular.js が提供するすべてのサービスを確認できる場所はありますか?

    Angular に含まれるすべての組み込みサービス、フィルター、ディレクティブのリストについては、API を参照してください: http://docs.angularjs.org/api

于 2013-10-08T03:11:33.400 に答える