Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS服务中共享数据_Javascript_Angularjs - Fatal编程技术网

Javascript 在AngularJS服务中共享数据

Javascript 在AngularJS服务中共享数据,javascript,angularjs,Javascript,Angularjs,我一直在使用AngularJS中的服务在控制器之间共享数据。在一个特定的服务中,我还想公开一些编辑共享对象的功能。我在这里创建了一个简化的JSFIDLE: 我可以看到,调用updateObject()时的“this”不是服务返回的对象文本。我意识到我可以简单地使这个服务依赖于另一个只公开共享数据对象的服务,但是有没有一种方法可以在不创建第二个服务的情况下这样做呢 谢谢, Richardjavascript中的这个关键字可能有点让人困惑,因为在大多数情况下,它的值是由函数的调用方式决定的。互联网

我一直在使用AngularJS中的服务在控制器之间共享数据。在一个特定的服务中,我还想公开一些编辑共享对象的功能。我在这里创建了一个简化的JSFIDLE:

我可以看到,调用updateObject()时的“this”不是服务返回的对象文本。我意识到我可以简单地使这个服务依赖于另一个只公开共享数据对象的服务,但是有没有一种方法可以在不创建第二个服务的情况下这样做呢

谢谢,
Richard

javascript中的
这个
关键字可能有点让人困惑,因为在大多数情况下,它的值是由函数的调用方式决定的。互联网上有很多很好的文章描述了这种行为()

我通常在我的服务中这样做-
var myService
在服务工厂中现在是可以注入到其他服务中的相同对象:

.factory('myService',function()){
var myService={
我的共享对象:{
myText:'abc'
},
updateObject:function(){
log('function called');
console.log(this);
myService.mySharedObject.myText='def';
}
};
返回myService;
})

我更新了您的示例,向您展示了如何从
this
中获得期望值,以及如何避免使用
this
的简单解决方案:

javascript中的
this
关键字可能有点混乱,因为在大多数情况下,它的值是由函数的调用方式决定的。互联网上有很多很好的文章描述了这种行为()

我通常在我的服务中这样做-
var myService
在服务工厂中现在是可以注入到其他服务中的相同对象:

.factory('myService',function()){
var myService={
我的共享对象:{
myText:'abc'
},
updateObject:function(){
log('function called');
console.log(this);
myService.mySharedObject.myText='def';
}
};
返回myService;
})

我已经更新了您的示例,向您展示了如何从
中获得预期值,以及如何避免使用
的简单解决方案:

非常感谢,这非常有效。我仍然对“这个”有点模糊,所以我很欣赏文章链接。如果你发现“这个”行为令人困惑,你可以考虑使用咖啡稿。它们引入了两个运算符(->和=>),后者自动执行joakimbl在上面所做的操作。这样,您就可以指望“this”的定义与函数定义的“this”相匹配,而不是函数调用的位置。非常感谢,这非常有效。我仍然对“这个”有点模糊,所以我很欣赏文章链接。如果你发现“这个”行为令人困惑,你可以考虑使用咖啡稿。它们引入了两个运算符(->和=>),后者自动执行joakimbl在上面所做的操作。这样,您就可以指望定义“this”与定义函数的“this”相匹配,而不是从哪里调用函数。
angular.module('myApp', [])
.factory('myService', function() {
    return {
        mySharedObject:{
            myText:'abc'
        },
        updateObject: function() {
            console.log('function called');
            console.log(this);
            this.mySharedObject.myText = 'def';
        }
    };
})