1

我正在跨多个控制器共享服务。我做了这个简化的小提琴来说明它:http: //jsfiddle.net/ziaxdk/FFgpX/

app.service("common", function() {
var first = 1, second = 2;
return {
    first: first,
    second: second,
    // {{model.first+model.second}}    calculate this down here??
    calc: function() { return  first + second;  } // This line is not watched
}

});

如何在服务对象上创建计算规则/属性,以便它们反映到视图中?

问候,

肯尼斯

4

1 回答 1

3

这并不是真正的 AngularJS 特有的问题,而是闭包在 JavaScript 中对于原始类型的工作方式。基本上,当您对原始类型进行闭包时,您将获得原始值的副本而不是对它们的引用。您正在断开链接。因此,在您的代码中,您一直在更改不同的变量值,然后是用于计算的变量值。

您可以按如下方式修改您的服务:

app.service("common", function() {    
    return {
        first: 1,
        second: 2,        
        calc: function() { return  this.first + this.second;  }
    }
});

你的代码就可以运行了。

这是一个有效的 jsfiddle:http: //jsfiddle.net/e3nzY/2/

于 2013-04-23T06:36:35.933 回答