11

Angularjs を使ったさまざまなコーディング スタイルに出会い、それぞれのコーディング スタイルの長所と短所を考えさせられました。

例えば。コントローラーの宣言:

スタイル #1

angular.module('mainCtrl', []);
function MainCrl($scope, $rootScope) {}

スタイル #2

angular.module('mainCtrl',[])
.controller('MainCtrl', function($scope, $rootScope)) { ... });

スタイル #3

angular.module('mainCtrl',[])
.controller('MainCtrl', ['$scope', '$rootScope', function(scope, rootScope)) { ... }]);

したがって、スタイル #3 はエイリアスの使用に多少似ています。エイリアスを使用すると、テストスクリプト (単体テスト) を作成するときに効果がありますか?. Angularjs Framework を使用するときの理解を深め、正しいアプローチをしたいだけです。

これについてあなたの考えを共有してください。ありがとう!

4

2 に答える 2

14

スタイル #1 は、コントローラーがモジュールの外部でグローバルとして定義されることを意味します。小さなテスト プロジェクトでは問題ありませんが、重大な作業の場合はすべて #2 または #3 を使用して行う必要があります。#2 と #3 の違いは、#2 の $scope と $rootScope の名前が通常は最適化され、アプリケーションが失敗するため、#3 は最小化できることです。注※3 縮小化されない文字列として格納します。

コードを縮小する可能性が少なくともある場合は、#3 を選択してください。#2 よりも #1 を使用してもほとんど意味がないので、私は #1 を完全に避ける傾向があります。

于 2013-09-11T06:40:54.663 に答える
0

それらはすべて有効ですが、グローバル関数を公開することは通常は良い考えではありません (名前が衝突する可能性があります)。

これにより、スタイル #2 が作成されます。

AngularJS はdependency injection、他のサービス、フィルター、コントローラーなどを提供するために使用します。これは、関数パラメーターをピークし、正規表現を介して取得し、必要に応じて提供することによって行われます。

しかし、縮小化するとどうなりますか?余分なバイトを取り除くために、ミニファイアは関数内の変数とパラメーターの名前を変更します。これは、関数のパラメーターを取得するために覗いていない場合は何も変更せず、すべてが機能するためです。

縮小すると、例えば$rootScopeになりa、 there is no のようなエラーがスローされますaProvider

したがって、角度には別の構文があります。それは配列表記です。関数を定義する代わりに、依存関係名の後に実装関数が続く配列を定義できます。

そう、

angular.controller("MainCtrl", ["$scope", "$routeParams", function (a,b) {
    // a == $scope
    // b == $routeParams
}]);

配列を定義する代わりに、それを行う他の方法もあります。関数の $inject プロパティを配列に設定できます。

function MainCtrl(a,b) {
    // a == $scope
    // b == $routeParams        
}
MainCtrl.$inject = ["$scope", "$routeParams"];

詳細情報: http://docs.angularjs.org/guide/di

于 2013-09-11T06:44:12.063 に答える