AngularJS-'这'在私人活动中
AngularJS - Use of 'this' inside a private function
本文关键字:活动中 AngularJS- 更新时间:2023-09-26
在我的Angular模块中,我有一个类似这样的服务:
myApp.service( 'myService', function(){
this.publicFunction1 = function(){
...
};
this.publicfunction2 = function(){
...
};
function privateFunction(){
...
}
});
在某种程度上,我需要从私有函数调用一个"公共"函数,如下所示:
function somePrivateFunc(){
this.publicFunction1();
...
}
但是元素"this"在私有函数中似乎不可见。如何在内部调用publicFunction1()?
这里有一个变通办法,但我想清楚地了解情况。有人能向我解释一下这里发生了什么吗?还有更好的方法吗
myApp.service( 'myService', function(){
var service = this;
this.publicFunction1 = function(){
...
};
this.publicfunction2 = function(){
...
};
function privateFunction(){
service.publicFunction1();
...
}
});
保留this
的引用外部变量,并到处引用它,如下所示:
myApp.service('myService', function() {
var self = this;
this.publicFunction1 = function() {
...
};
this.publicfunction2 = function() {
...
};
function privateFunction() {
...
}
function somePrivateFunc() {
self.publicFunction1();
...
}
});
由于公共函数是服务的一部分,而angular服务的执行上下文只不过是this
关键字。但是,由于私有函数(普通的javascript函数)不是服务的一部分,因此该函数不共享相同的执行上下文。因此,对于该私有函数,执行上下文不过是全局window
对象。因此,如果在私有函数中引用this
,则会得到window
对象。因此,要从普通的javascript函数(私有函数)调用服务函数,我们需要存储angular this
对象的引用。
希望这能消除你的疑虑。
您可以在以下变量中为此创建引用:
myApp.service( 'myService', function(){
var self = this; // creation of the variable here
this.publicFunction1 = function(){
...
};
this.publicfunction2 = function(){
...
};
function privateFunction(){
self.publicFunction1();
...
}
});
编辑:为了解释为什么它是必要的,Angular是在依赖注入的基础上完成的(阅读此处:https://docs.angularjs.org/guide/di)。例如,您将在控制器中添加"myService"作为依赖项,并且您将可以访问根据"myService"定义创建的对象。
然后您就可以调用这个.publicFunction1().
另一方面,如果你不添加这个,这个方法将不存在于你的控制器中。
在函数之外,声明一个变量,如下所示:
var me = this;
然后,您可以从函数中引用"外部"this
。
相关文章:
- Atom.io中AngularJS的方法完成
- Android,如何将活动中的参数插入JavaScript
- 如何在Slick Carousel中获取活动中的幻灯片元素
- 参考Javascript中AngularJs指令的生成
- 除非刷新,否则Firebase数据不会加载到列表中(AngularJS,Firebase和ionic)
- 将两个数组绑定到一组复选框中 - angularjs
- 如何知道单击了哪个按钮,以便我可以在同一活动中打开网页
- 按钮 On在其他活动中创建资产/资源
- 如何将控制器放在外部HTML文件中 AngularJS.
- Typescript 中 AngularJS 控制器的实例与原型方法
- 你为什么要用!!在这种情况下的表达式中?AngularJS API.
- 自动将数据插入到字段中angularjs
- 在.then()单元测试中AngularJS$作用域变量的变化
- Cordova中心项目在活动中
- 当我在当前活动中按下按钮时,如何更改下一个活动背景
- AngularJS-'这'在私人活动中
- 将attrs指令放入模板中.AngularJS
- asp.net mvc中angularjs的多重布局
- Javascript不能在WebView活动中工作
- 指令中AngularJS的作用域没有更新