2016-03-24 10 views
0

私は工場を使用するAngularJS指令を持っています。私が達成しようとしているのは、ディレクティブの 'mousedown'イベントがトリガされたときに、工場の機能が呼び出されるようにすることです。AngularJS Factoryイベントバインディング

しかし、私が問題を抱えているところは、工場の機能にあります。工場で宣言された変数にはアクセスできません。

私の指示でマウスダウンイベントに結合する例 -

$element.on('mousedown', factory.onMouseDown);

私の工場と私の指示によって呼び出される関数の例 -

angular.module('myApp.myFactory', []).factory('myFactory', [, function() { 
 
    var myFactory = function() { 
 
     this.someVariable = true; 
 
    }; 
 

 
    myFactory.prototype.onMouseDown = function (e) 
 
    { 
 
     console.log(this.someVariable); // this.someVariable comes up as 'undefined' 
 
    }; 
 

 
    return myFactory; 
 
}]);

私のfuのために何をする必要がありますか私の工場の変数にアクセスできるようにするには?

ありがとうございます!

答えて

1

(1)コンテキストとしてオブジェクトをバインディング:

$element.on('mousedown', factory.onMouseDown.bind(factory)); 

(2)factory基準を維持するために閉鎖を使用する:

コールバック引数が既知である場合

:コールバック引数が知られていない場合

$element.on('mousedown', function (evt) { 
    factory.onMouseDown(evt); 
}); 

$element.on('mousedown', function() { 
    factory.onMouseDown.apply(factory, arguments); 
}); 

(3)特権方法とコンストラクタ関数を使用する代わりに、プロトタイプのプロパティを使用して:

angular.module('myApp.myFactory', []).factory('myFactory', function() { 
    var myFactory = function() { 
     var self = this; 
     self.someVariable = true; 
     self.onMouseDown = function (e) { 
      console.log(self.someVariable); 
     }; 
    }; 

    return myFactory; 
}); 
0

関数が正しくトリガされている場合は、myFactoryファクトリによって返されるものが不足していると思います。ファクトリとサービスはクロージャのように動作するので、ファクトリで変数を宣言し、そのファンクションにアクセスできるので関数を返すことができます。 myFactoryが「クラス」をシミュレートしているとfactory変数は、それを解決するために多くのアプローチがあるmyFactoryによってインスタンス化されたオブジェクトを保持していると仮定して

angular.module('myApp.myFactory', []).factory('myFactory', [function() { var someVariable = "asdkhdsfhkhlskadfhadsflk"; var myFactory = { mouseDownEvent: function(e){ console.log(someVariable); } } return myFactory; }]);

関連する問題