更新'这个'通过函数在服务中的价值

时间:2015-07-15 14:49:22

标签: javascript angularjs

我对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
}

任何提示都将不胜感激。

3 个答案:

答案 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;

希望这是你的问题。