初学Angular遇到了点困惑,以下面这个控制器函数为例
function hello($scope) { $scope.name = '张三' }
这是个函数声明,$scope理应是形参吧?可是把$scope改为其他标识符如s就不行了。可见$scope是hello函数被调用时传入的实参。但这三行代码是函数的声明,怎么就传入实参了呢?
我大概意识到了这不是一个正常的函数声明,可能与Angular的控制器函数的绑定机制有关系?具体是怎样的?
この種のパラメーターの受け渡しによる依存関係の取得は、AngularJS の主要な機能であり、依存関係注入の現れの 1 つです。 しかし、パラメーターを宣言するだけで依存関係を取得できるのはなぜでしょうか?
AngularJS は $injector を使用して、$injector管理依赖的查询与加载,比如
$injector
// 使用注入器加载应用 var injector = angular.injector(['ng', 'myApp']); // 通过注入器加载$controller服务 var $controller = injector.get('$controller'); var scope = injector.get('$rootScope').$new(); // 加载控制器并传入一个作用域 var MyController = $controller('MyController', {$scope: scope})
如果没有显示声明,$injector などの依存クエリと読み込みを管理します リーリー 明示的な宣言がない場合、$injector はパラメータ名に基づいて 依存関係を推測します 現時点では、パラメータの順序は意味がありません。
まあ、これは単に関数宣言が書かれているだけで、仮パラメータの名前が重要かどうかは完全に読み手によって決まります。ECMAScript 標準パーサーはそれが重要であるとは考えていません (おそらく) が、Angular は js を採用しました。そして「js」パーサーを書きました。 。 。このように、関数パラメータの名前は重要です
範囲 AngularJS の $scope オブジェクトはドメイン モデルを変換するためにここにあります ビュー (テンプレート) に公開されます。プロパティをスコープ インスタンスに設定するだけで、テンプレートがレンダリングされるときに値を取得できます。 スコープは、特定のビューのデータと特定の関数を拡張することもできます。特定の UI を変換するには、スコープ インスタンスでいくつかの関数を定義するだけです ロジックはテンプレートに公開されます。 たとえば、次のように name 変数のゲッター メソッドを作成できます: リーリー 次に、次のようにテンプレートで使用します: <h1>Hello, {{getName()}} !</h1> $スコープ オブジェクトを使用すると、モデルのどの部分がこのドメイン内にあるのか、またビュー層でどの操作が使用できるのかを非常に正確に制御できます。理論的には、AngularJS スコープは MVVM パターン ViewModel に非常に似ています。
範囲
AngularJS の $scope オブジェクトはドメイン モデルを変換するためにここにあります ビュー (テンプレート) に公開されます。プロパティをスコープ インスタンスに設定するだけで、テンプレートがレンダリングされるときに値を取得できます。
スコープは、特定のビューのデータと特定の関数を拡張することもできます。特定の UI を変換するには、スコープ インスタンスでいくつかの関数を定義するだけです ロジックはテンプレートに公開されます。
たとえば、次のように name 変数のゲッター メソッドを作成できます:
次に、次のようにテンプレートで使用します: <h1>Hello, {{getName()}} !</h1>
<h1>Hello, {{getName()}} !</h1>
$スコープ オブジェクトを使用すると、モデルのどの部分がこのドメイン内にあるのか、またビュー層でどの操作が使用できるのかを非常に正確に制御できます。理論的には、AngularJS スコープは MVVM パターン ViewModel に非常に似ています。
http://note.sdo.com/u/635412003927148913/n/s6cBN~lcIHwG4M1-Y000LW
この種のパラメーターの受け渡しによる依存関係の取得は、AngularJS の主要な機能であり、依存関係注入の現れの 1 つです。
しかし、パラメーターを宣言するだけで依存関係を取得できるのはなぜでしょうか?
AngularJS は
$injector
を使用して、$injector
管理依赖的查询与加载,比如如果没有显示声明,
つまり、次のように宣言することもできます:🎜 リーリー$injector
などの依存クエリと読み込みを管理します リーリー 明示的な宣言がない場合、$injector
はパラメータ名に基づいて 依存関係を推測します現時点では、パラメータの順序は意味がありません。
まあ、これは単に関数宣言が書かれているだけで、仮パラメータの名前が重要かどうかは完全に読み手によって決まります。ECMAScript 標準パーサーはそれが重要であるとは考えていません (おそらく) が、Angular は js を採用しました。そして「js」パーサーを書きました。 。 。このように、関数パラメータの名前は重要です
http://note.sdo.com/u/635412003927148913/n/s6cBN~lcIHwG4M1-Y000LW