将方法绑定到数组中的每个项目

时间:2016-05-16 02:47:11

标签: javascript angularjs

我很难找出将函数绑定到JavaScript / Angular中对象数组中每个项的语法。

我尝试了各种方法,虽然可能在语法上不正确,但我觉得我在这里的方法在逻辑上是正确的。

var module = angular.module('app', [])
  .controller('controller', function () {
    var vm = this;

    vm.foo = 5;
    vm.bars = [
      {
        price: 1000
      },
      {
        price: 2000
      }
    ];

    var qty = function () {
      return vm.foo / this.price;
    };

    for(var i = 0; i < vm.bars; i++) {
      vm.bars.bind(vm.bars[i], qty);
    }
  });

我的想法是将每个项目的this绑定到自身,这将是允许每个项目引用price函数中自己的qty()属性的最佳方式,该函数位于对象。

我基本上只是在设置数组时试图避免将函数复制/粘贴为每个项的属性。

2 个答案:

答案 0 :(得分:1)

我不确定你想要在这里实现什么,但如果你想为所有元素添加qty函数,可以这样做:

var module = angular.module('app', [])
  .controller('controller', function () {
    var vm = this;

    vm.foo = 5;
    vm.bars = [
      {
        price: 1000
      },
      {
        price: 2000
      }
    ];

    var qty = function () {
      return vm.foo / this.price;
    };

    vm.bars.forEach(function(bar){
      bar.qty = qty;
    })


  });

答案 1 :(得分:0)

尝试IIFE(立即调用函数表达式)。

for(var i = 0; i < vm.bars; i++) {
  (function(i){
    vm.bars.bind(vm.bars[i], qty);
  )(i);
}