0

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

http://jsfiddle.net/RichardBender/CQ6Z4/2/

angular.module('myApp', [])
.factory('myService', function() {
    return {
        mySharedObject:{
            myText:'abc'
        },
        updateObject: function() {
            console.log('function called');
            console.log(this);
            this.mySharedObject.myText = 'def';
        }
    };
})

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

谢谢,理查德

4

1 回答 1

3

javascript 中的this关键字可能有点混乱,因为在大多数情况下,它的值取决于函数的调用方式。互联网上有很多描述这种行为的好文章(这篇看起来不错)。

我通常在我的服务中做这样的事情——var myService在服务工厂中,现在你可以在其他服务中注入同一个对象:

.factory('myService', function() {
  var myService = {
    mySharedObject:{
        myText:'abc'
    },
    updateObject: function() {
        console.log('function called');
        console.log(this);
        myService.mySharedObject.myText = 'def';
    }
  };
  return myService;
})

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

于 2013-05-21T04:52:25.730 回答