2016-07-13 6 views
-1

依存性注入と通常のjavascript関数との違いは何ですか? Angular DIがどんなことをしていても、プレーンなjavascript関数で行うことができますか?Angular Js依存性注入とjavascript関数の違い

+0

ええ、単純に関数から引数名を読み込み、依存関係を解決してください。もちろん、リゾルバから依存関係に到達できる必要があります。ただし、コードを小さくすると何が起こるのか何とか処理しなければならないことに注意してください。通常は、関数のパラメータ名がぎこちなく置き換えられます。 –

+0

これらの回答のいずれかがあなたの質問を解決した場合は、その横にあるチェックマーク –

答えて

0

主な違いは、角型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)foobarのような任意の名前を付けることができ、好きな方法で呼び出すことができます。 fooBar('a', false)に電話するとfooの値は'a'になりますが、barの値はfalseになります。

もちろん、注入可能なjavascript関数を自分で作成することもできます。なぜなら、これはまさにどのような角度だったのでしょうか。

0

依存性注入:オブジェクトを関数に与える。

関数内にオブジェクトを作成するのではなく、関数にオブジェクトを渡します。

今主な違いは、例を用いて説明する:依存性注入と

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を見るとき、オブジェクトを作成し、そのオブジェクトにそのメソッドを渡す必要があることを知っています。