我对Angular很新,我正试图了解一切是如何运作的。我一直在四处寻找,无法找到有关如何做到这一点的任何信息。所以,我有一个定义
的服务this.totalCount = 0;
在我的控制器中,我的get请求检索一些电子邮件,然后为它检索的每条消息执行一个名为addMessage的函数。 addMessage函数在我的服务中。
我服务中的功能如下所示:
this.addMessage = function (messageObj) {
this.messagesList.push(messageObj);
}
基本上,我每次执行此函数时都会尝试递增this.totalCount,以便更新然后可以在视图中显示。我现在在视图中显示它,但它的数字始终为0。
我尝试过以下方法:
1
this.addMessage = function (messageObj) {
this.messagesList.push(messageObj);
this.totalCount++;
}
2
var count = this.totalcount
this.addMessage = function (messageObj) {
this.messagesList.push(messageObj);
count++; //and then attempted to display this value in the view but with no luck
}
任何提示都将不胜感激。
答案 0 :(得分:1)
试试这个:
var that = this;
this.addMessage = function (messageObj) {
that.messagesList.push(messageObj);
}
答案 1 :(得分:0)
您将参数传递给另一个与您的服务具有不同范围的函数。将当前对象分配给变量是一种技巧,从函数可见。
var that = this;
this.addMessage = function (messageObj) {
that.messagesList.push(messageObj);
that.totalCount++;
}
应该有效。 因此,您将该变量与当前对象一起分配,该对象在内部函数范围内可见。 在函数addMessage体中,这指的是新的函数作用域,并且没有编译器错误,但messagesList是一个空对象,并且totalCount递增,但是在程序离开函数之后,它在服务中不可见,因为它在一个未分配给任何变量的函数范围。
要更新控制器中更改的服务变量,请使用$ watch。
$scope.$watch(function() {
return messagesService.totalCount;
}, function(new,old){
$scope.totalmessagecount = messagesService.totalCount;
});
$ watch的第一个参数if if change for change element的函数。另一个是更新后执行操作的标准功能。
答案 2 :(得分:0)
我假设您在控制器和视图中以这种方式绑定var
服务:
this.totalCount = 0;
this.totalCount++;
控制器:
$scope.totalCount = service.totalCount;
观点:
{{totalCount}}
如果你真的像这样做,你应该面对这样的麻烦。
主要问题是totalCount是一个原始的var并且这样做.totalCount ++将破坏引用。如果你想保留一些var,你应该把它绑定为一个子对象。
这样:
服务:
this.utils = {};
this.utils.totalCount = 0;
this.utils.totalCount++;
控制器:
//This is the most important part. You bind an object. Then even if you loose the totalCount reference, your object will keep its own reference.
$scope.myServiceUtils = service.utils;
查看:
{{myServiceUtils.totalCount}}
实际上在服务中(这是一个品味问题)我更喜欢使用对象语法而不是这个(因为“这个”可能会令人困惑)
这样:
var service = {};
service.utils.totalCount = 0;
service.addItem = function(){
...
}
return service;
希望这是你的问题。