依存性注入と通常のjavascript関数との違いは何ですか? Angular DIがどんなことをしていても、プレーンなjavascript関数で行うことができますか?Angular Js依存性注入とjavascript関数の違い
答えて
主な違いは、角型DI関数が名前で注入されている点です。例えば。それは$log
サービスの正しい名前ではありませんので、
function controller($log)
が$http
への依存を宣言するのが正しい方法です、しかしfunction controller($logger)
は動作しません。
角の依存関係は$provide
サービスで登録されますが、通常modules
に公開される便利な方法を使用します(.controller
など)。 $provide
を電話帳の一種と考えるのが最善です。あなたはどの工場/コントローラ/ ...とどの名前を一致させたいのかを教えてください。たとえば、.factory('PokemonFactory', function() { ... })
を呼び出すと、電話帳にPokemonFactory
が対応する機能で登録されます。
注入部分は$injector
の責任であるため、注射機能を自分で呼び出す必要はありません。たとえば、コントローラーにPokemonFactory
を注入すると、$injector
は電話帳でPokemonFactory
を検索し、関連する機能を取得します。
角度1では、モジュール名で表される特定の名前付き電話帳を工場/コントローラ/ ..に登録する必要があることに注意してください。
対照的に、ネイティブのjavascript関数の引数は、順序で解決されます。たとえば、function fooBar(foo, bar)
、foo
、bar
のような任意の名前を付けることができ、好きな方法で呼び出すことができます。 fooBar('a', false)
に電話するとfoo
の値は'a'
になりますが、bar
の値はfalse
になります。
もちろん、注入可能なjavascript関数を自分で作成することもできます。なぜなら、これはまさにどのような角度だったのでしょうか。
依存性注入:オブジェクトを関数に与える。
関数内にオブジェクトを作成するのではなく、関数にオブジェクトを渡します。
今主な違いは、例を用いて説明する:依存性注入と
var Person = function(firstname, lastname){
this.firstname = firstname;
this.lastname = lastname;
}
function logPerson(){ //this function is dependent on the variable john
//if something was to change about john, it can only be changed inside this function
var john = new Person('John, 'Doe');
console.log(john); //will output the object
}
logPerson();
同じ例:
var Person = function(firstname, lastname){
this.firstname = firstname;
this.lastname = lastname;
}
function logPerson(person){ //this object is passed to the function
//now this function is not dependent on how john is created
console.log(person); //will output the object
}
var john = new Person('John, 'Doe');
logPerson(john);
同じことが角度JSの場合です。コントローラー機能に何かを注入することができます。そのことがどのように作られたかに依存しません。
角度はどのように依存性注入を行うのですか?今、代わりのfirstNameの想像
var myApp = angular.module('myApp',[]);
myApp.controller('myController',function($scope){
console.log($scope); //$scope is a service that is the part of core angular module
});
var searchPeople = function(firstName, lastName, height, age, occupation){
return 'John Doe';
}
angular.injector().annotate(searchPeople);
//if you console.log the above thing it will give you an array ["firstName", "lastName", "height","age", "occupation"]
、あなたはその角度の用途に精通しているジェクト$スコープまたは何か他のものでした。
Angularは配列に$ scopeを見るとき、オブジェクトを作成し、そのオブジェクトにそのメソッドを渡す必要があることを知っています。
- 1. Angular JS単純依存性注入
- 2. Angular $ injectorと角度依存性注入
- 3. Angular Js依存注入の問題
- 4. 関数型プログラミングの依存性注入
- 5. バックボーンjsモデル依存性注入
- 6. 依存性注入とテストの倍数
- 7. アングルディンプル依存性注入
- 8. CA2000と依存性注入
- 9. アダプターと依存性注入
- 10. 依存性注入とテスト
- 11. WCFと依存性注入
- 12. 依存性注入とModelStateWrapper
- 13. 依存性注入
- 14. 角2依存性注入
- 15. typescript依存性注入フレームワーク
- 16. Zend Framework依存性注入対Symfony2依存性注入
- 17. 依存性注入を使用した依存性注入器の注入
- 18. ASP.NETコア依存性注入:工場とインスタンスの違い?
- 19. Symfony 2:依存性注入と特性
- 20. 春の依存性注入
- 21. Groovyの依存性注入
- 22. MVCの依存性注入
- 23. 依存性の注入
- 24. ApiControllerの依存性注入?
- 25. コンストラクターの依存性注入
- 26. XPCOMの依存性注入
- 27. ダイナミックランタイム依存性の注入
- 28. 依存性注入のクエリ
- 29. 継承依存性の注入
- 30. カスタムViewResolverと依存性注入
ええ、単純に関数から引数名を読み込み、依存関係を解決してください。もちろん、リゾルバから依存関係に到達できる必要があります。ただし、コードを小さくすると何が起こるのか何とか処理しなければならないことに注意してください。通常は、関数のパラメータ名がぎこちなく置き換えられます。 –
これらの回答のいずれかがあなたの質問を解決した場合は、その横にあるチェックマーク –