5

ご存じのとおり、angularjs では、ほとんどの論理は以下に基づいてい$scopeます。

function Ctrl($scope) {
    $scope.name = "Freewind";
    $scope.hello = function() {
       alert($scope.name);
    }
    $scope.method1 = function() {}
    $scope.method2 = function() {}
    $scope.method3 = function() {}
    $scope.method4 = function() {}
    $scope.method5 = function() {}
}

現在、haxe を使用して angularjs コードを生成しています。コードが次の場合に機能します。

class Ctrl {
   public function new(scope:Scope) {
      scope.name = "Freewind";
      scope.hello = function() {
         alert(scope.name);
      }
      scope.method1 = function() {}
      scope.method2 = function() {}
      scope.method3 = function() {}
      scope.method4 = function() {}
      scope.method5 = function() {}
   }
}

typedef Scope = {
    name:String,
    hello:Void->Void,
    method1: Void->Void,
    method2: Void->Void,
    method3: Void->Void,
    method4: Void->Void,
    method5: Void->Void
}

しかし、次のように宣言するために、haxe のクラス システム (コードはより単純で明確になる可能性があります) の恩恵を受けたいと考えています。

class Scope {
    public var name:String;
    public function hello() {}
    public function method1() {}
    public function method2() {}
    public function method3() {}
    public function method4() {}
    public function method5() {}
}

次に、Scopeクラスを$scopeangularjs の に関連付ける方法を見つけます。

しかし、Scopehaxe から生成されたものはプロトタイプを使用しています。

Scope = function();
Scope.prototype.name = "something";
Scope.prototype.hello = function() {}
Scope.prototype.method1 = function() {}
Scope.prototype.method2 = function() {}
Scope.prototype.method3 = function() {}
Scope.prototype.method4 = function() {}
Scope.prototype.method5 = function() {}

この場合、angularjs で動作させるための解決策が見つかりません。

angularjs をプロトタイプで動作させることは可能ですか?

4

2 に答える 2

2

この質問に対する実際の回答を得るために、このライブラリが問題を解決するようになったことに言及する必要があります: https://github.com/freewind/HaxeAngularSupport ;)

于 2013-01-22T17:10:36.957 に答える
1

スコープのコンストラクターはクロージャー内で宣言されているため、簡単にアクセスすることはできません... しかし (!) JavaScript には、既存のオブジェクトからすぐにコンストラクターを使用できます。

理論的には、$rootScope のコンストラクターを取得し、そのプロトタイプを変更すると、その後に作成されたスコープが変更されるはずです。ただし、おそらく、アプリケーション モジュールの .run() または .config() でこれを行いたいと思うでしょう。

app.run(function($rootScope) {
   $rootScope.constructor.prototype.foo = 'Set from prototype';
});

それは機能し、ここに plunker があります。

ただし、おそらくこれを行う必要はありません。これを行う必要があると私が考えることができる唯一の理由は、たとえそれが分離されたスコープであったとしても、何らかの関数またはプロパティがスコープで利用可能であることを確認する必要があるいくつかのエッジケースです (私がリンクしたプランカーのディレクティブ)。

スコープの継承があり、使用する $rootScope があるため、プロトタイピングによってスコープを変更する必要がある正当な理由はまったく考えられません。

于 2013-01-18T14:33:01.700 に答える