私はサービスと工場を理解するためにシリーズのドキュメントを読む予定です。 この作業コード全体に渡っています。 TangentCtrlコントローラの$ scope.jump機能で小さなサービスのangularJSのサービス。
var app = angular.module('plunker', []);
app.value('cnt', 7);
app.service('foo', function(cnt) {
this.cnt = ++cnt;
this.inc = function(quan) {
this.cnt += quan;
};
});
app.controller('MainCtrl', function($scope, cnt, foo) {
$scope.cnt = cnt;
$scope.foo = foo;
$scope.inc = function() {
$scope.foo.inc(1); // why $scope used here
};
});
app.controller('TangentCtrl', function($scope, foo) {
$scope.jump = function() {
foo.inc(5); // Why $scope not used here and why it doesnot work when I add scope
};
});
そのないあなたは、私がコメントしているコードに見ることができるようfoo.incにアクセスするには$スコープを使用して。 私は理解していないというコンセプトがいくつかあると思います。誰も私にこのことを教えてくれますか?あなたは、コントローラの機能でcontroller
app.controller('TangentCtrl', function($scope, foo) {...}
を宣言しながら、あなたはfoo
サービスのインスタンスを取得foo
を注入しているためである
'foo'はサービスですか?これは '$ scope'オブジェクトとは全く違うものです。サービスはちょうどそのものであり、 '$スコープ 'に対して公開されていません。彼らはさまざまな場所に注入されることを意図しているので、アプリケーションのロジックとデータを共有することができます。この例の文脈の残りの部分を見ることなく、なぜ 'foo'が' $ scope'に手動で追加されたのかを言うのは難しいです。それは一般的に私が個人的に手伝っている練習です。私はそれらが一緒にリンクされているのが好きではありません。 – ste2425
'$ scope.foo = foo;'ここで、 '$ scope'オブジェクトにfooの複製を作成しました。したがって、' $ scope.foo.inc() 'または' foo.inc'だけを使うことができます。あなたは '$ cope'オブジェクトにfooのインスタンスを作成しましたが、' foo'は依存関係として注入されています。コントローラで 'foo.inc()'を直接使うことができます。注意:メインコントローラ'foo'を$ scopeオブジェクトにコピーする必要はなく、' foo.inc() 'を直接使うことができます。 –