为什么我在使用 Angular 的 forEach 循环中无法访问工厂中的数组?

Why can I not access an array in factory while I am in a forEach loop with Angular?

我有以下问题:为什么我无法使用 Angular 在 forEach 循环中访问我的数组。我用一个数组和一个函数创建了这个工厂,在我有这个 forEach 循环的函数中。在 forEach 循环之外,我可以使用 this 关键字访问我的数组。在 forEach 循环中,它给了我一个未定义的值。

.factory("sendOrder", function () {


    return {
        paired: [],

        send: function () {
            var names = document.getElementsByTagName('input');
            var ordered = document.getElementsByClassName('ordered');
            var i = 0;
            console.log(this.paired);//I can access it from here


           angular.forEach(names, function (amount, key) {
            console.log(this.paired);//Unable to access

               i++; 
            return;
                })
        }
    }

})

因为函数的上下文发生了变化 - this 不是原来的样子。通常的解决方法是将原始上下文设置为变量(通常称为 self):

.factory("sendOrder", function () {


    return {
        paired: [],

        send: function () {
                var self = this;
                var names = document.getElementsByTagName('input');
                var ordered = document.getElementsByClassName('ordered');
                var i = 0;
                console.log(this.paired);//I can access it from here


               angular.forEach(names, function (amount, key) {
                console.log(self.paired);//should be fine now

                   i++; 
                return;
                    })
            }
        }
    })

也许这会有所帮助。 Angular lets you set the context(本)在 forEach。这是争论之一。您不必设置任何其他变量:

angular.forEach(obj, iterator, [context]);

您已通过 objiterator。只需为 context 传递一些内容,这将是函数中的 this