【问题标题】:Why can I not access an array in factory while I am in a forEach loop with Angular?为什么我在使用 Angular 的 forEach 循环中时无法访问工厂中的数组?
【发布时间】:2015-03-26 16:40:18
【问题描述】:

我有以下问题:为什么我无法使用 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;
                })
        }
    }

})

【问题讨论】:

标签: javascript arrays angularjs foreach


【解决方案1】:

因为函数的上下文发生了变化 - 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;
                    })
            }
        }
    })

【讨论】:

  • 有没有办法我仍然可以使用我的阵列,或者我应该解决它吗?
  • 绝对,抱歉,在完成之前发布了我的答案。只需将其分配给一个变量。
  • 感谢您的修复。就像 javascript 中的常规 oop 一样。
  • 顺便说一句,直到我在函数中移动 var self = this 之前,您发布的解决方案都不起作用。更新了您的解决方案。你还是让我走上了正轨!我认为您的解决方案中的this 确实引用了工厂对象而不是返回的对象。
【解决方案2】:

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

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

您已传入objiterator。只需为context 传递一些东西,这将是函数中的this

【讨论】:

  • 我明白了……很有趣。不知道我能做到这一点。谢谢
  • 你也可以在普通的旧 JavaScript 数组 forEach 中做同样的事情。
  • 是的,我知道,但我想以 Angular 的方式学习它,有时 Angular 真的很接近普通的 javascript。
  • 它在文档中,所以我认为你不必担心它不是 Angular 的方式。 Self 一般是一个 JavaScript 的东西,看起来像:stackoverflow.com/questions/962033/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2012-10-12
  • 2022-01-14
相关资源
最近更新 更多