我有一个使用工厂的AngularJS指令。我努力实现的目标是确保当“躲避”时触发指令中的事件,然后调用我工厂中的函数。
看起来很简单,然而,我遇到的问题是在工厂的功能中。它无法访问我在工厂中声明的任何变量。
在我的指令中绑定到mousedown事件的示例 -
$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;
}]);

为了让我的函数能够在工厂中访问变量,我需要做些什么?
谢谢!
答案 0 :(得分:1)
假设myFactory
正在模拟"类"并且factory
变量包含由myFactory
实例化的对象,有很多方法可以解决它:
(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)使用具有特权方法的构造函数而不是使用prototype属性:
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;
});
答案 1 :(得分:0)
如果函数正确触发,我认为你缺少的是myFactory工厂返回的内容。角度的工厂和服务就像一个闭包,所以你可以在工厂中声明变量并让函数返回它,因为它可以访问它。
angular.module('myApp.myFactory', []).factory('myFactory', [function () {
var someVariable = "asdkhdsfhkhlskadfhadsflk";
var myFactory = {
mouseDownEvent: function(e){
console.log(someVariable);
}
}
return myFactory;
}]);