1

私のプロジェクトでは、カスタム タイプを作成しましたMyType。複数の角度モジュールで使用したいのですが、正しい方法がわかりません。私の最初の推測では、カスタム型を公開するサービスを作成することですが、それは少し複雑すぎるように思えます。そのメソッドのデモ コードを以下に示します。ライブ デモはhttp://jsfiddle.net/deafcheese/GS4tN/にあります。

より良い方法はありますか?モジュール内に含まれるものを保持したいので、カスタム型をグローバルとして公開したくありません。

カスタム タイプのサービスを定義します。

//this code is in file myproject.js
(function(angular, undefined) {
  //custom type
  function MyType(name) {
    this.name = name;
  }
  MyType.prototype.toString = function(){
    return '[MyType ' + this.name+ ']';
  };

angular.module('myproject', [])

  .service('myProjectService', function() {
    //hack to expose MyType
    this.MyType = MyType
  });

}(angular));

最初のコントローラー:

//this code is in file modulea.js
(function(angular, undefined) {
angular.module('myproject.modulea', ['myproject'])

  .controller('ControllerA', function($scope,myProjectService) {
    var MyType = myProjectService.MyType,
        myInstance = new MyType('in controller a'); 
    $scope.myInstance = myInstance;
  });

}(angular));

2 番目のコントローラー:

//this code is in file moduleb.js
(function(angular, undefined) {

angular.module('myproject.moduleb', ['myproject'])

  .controller('ControllerB', function($scope,myProjectService) {
var MyType = myProjectService.MyType,
        myInstance = new MyType('in controller b'); 
    $scope.myInstance = myInstance;
  });

}(angular));

更新:サービスの代わりに定数を使用するhttp://jsfiddle.net/deafcheese/GS4tN/1/を作成しました:

angular.module('myproject', [])

.constant('myProjectsModel', {MyType:MyType});

}(angular));

それは問題ですか?一方が他方よりも優れているでしょうか?定数は他のプロバイダーの前にロードされるはずだと思いますが、それは正しいですか?

4

2 に答える 2

0

タイプを共有するには; 私はこれをやっています:

まず、次のタイプの JavaScript ファイルを作成します。MyType.js:

MyType = function MyType() {
 someInstanceVariable : "some default value";
 // whatever else you need in here
}

そのファイルを HTML に「インポート」します。

<script src="MyType.js"></script>

その後、そのカスタム タイプはどこでも使用できます。それが AngularJS Controllre 内にあるか、他の場所にあるかに関係なく、次のことができます。

var myTypeInstance = new MyType();
console.log(myTypeInstance);

console.log を使用して、ランダムなオブジェクトだけでなく、タイプのインスタンスを作成していることを証明できます。

このアプローチは、あなたが望んでいないと言った「グローバル」タイプを作成すると思います。なぜそれが望ましくないのですか?

タイプの単一のインスタンスを共有したい場合。この回答で説明されているように、Angular ファクトリを使用していますが、複数のモジュール間で単一のインスタンスを共有しようとしたことはありません。

于 2013-10-17T13:21:58.430 に答える