Javascript AngularJS服务变量引用

Javascript AngularJS服务变量引用,javascript,angularjs,Javascript,Angularjs,我已经为此挠头好几天了,请原谅我缺乏JavaScript专业知识,因为这可能就是问题所在 我有一个角度应用程序,其中包括一个用户将要处理的项目队列。我有一个管理此队列的服务(当前项目、移动、完成等)。我创建的控制器从服务器获取当前队列项目的详细信息,然后显示它们 我遇到的问题是服务在对象队列中正确移动,将当前项设置为当前索引处的数组项。但是,控制器从未看到当前项的更改 下面是一个基本的解释例子。例如,您需要查看控制台以查看输出 // ... service code... var items =

我已经为此挠头好几天了,请原谅我缺乏JavaScript专业知识,因为这可能就是问题所在

我有一个角度应用程序,其中包括一个用户将要处理的项目队列。我有一个管理此队列的服务(当前项目、移动、完成等)。我创建的控制器从服务器获取当前队列项目的详细信息,然后显示它们

我遇到的问题是服务在对象队列中正确移动,将当前项设置为当前索引处的数组项。但是,控制器从未看到当前项的更改

下面是一个基本的解释例子。例如,您需要查看控制台以查看输出

// ... service code...
var items = [];
var currentItem;
var currentIndex;
...
var moveNext = function() {
    currentIndex = currentIndex + 1;
    currentItem = items[currentIndex];
};

// ... controller code ...
var skip = function() {
    service.moveNext();
    fetchData(service.currentItem);  //THIS NEVER CHANGES, ALWAYS UNDEFINED
};

将当前项变量设置为数组中的某个位置可以在服务中看到,但在控制器中看不到。但是,如果我执行angular.extend而不是直接引用数组,它会工作。有人知道可能发生了什么吗?

这是因为服务对象从未从
moveNext
函数中更新过

试试这个:

// service code...
var service = {
    currentItem: null
};

// .......

service.moveNext = function () {
    currentIndex = currentIndex + 1;
    if (currentIndex >= items.length) {
        currentIndex = 0;
    }
    service.currentItem = items[currentIndex];
//  ^^^^^^^^ this is what was wrong...
};

return service;

这是您的小把戏:

您遇到了一个变量范围问题,使得变量
currentItem
在函数执行范围结束后被释放。将
currentItem
分配给
将修复它

var moveNext = function () {
    ...
    this.currentItem = items[currentIndex];
    ...
};
return {
    currentItem: this.currentItem,
    moveNext: moveNext
};

在我最初的小提琴中,该值设置在第29行,
currentItem=items[currentIndex]请原谅我对JavaScript的无知,但为什么这不起作用?@user2175281-在您最初的小提琴中,
currentItem
只是一个局部变量;它不是服务的一部分(即使您将其值分配给了服务对象)。