2016-05-16 7 views
1

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自体への結合は、各アイテムは対象外に住んqty()機能に独自のpriceプロパティを参照できるようにするための最良の方法だろうということです。

私は基本的には、配列を設定するときに各項目のプロパティとして関数をコピー/貼り付けすることを避けようとしています。

答えて

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; 
    }) 


    }); 
0

試行IIFE(即時呼び出し関数式)。

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

私が持っているもの(したがって、あなたが持っているもの)は、構文的に正しいものではありません。私はあなたがしようとしているものを手に入れますが、 'bind'の使い方が間違っていることは間違いありません。エラーのために、私は(そしてあなたの)状態を受け取るでしょう、 'vm.bars.bindは関数ではありません。 ' – mariocatch

+0

私は今見ます。あなたはこれをやろうとしているかもしれません:vm.qty = function(){ return vm.foo/this.price; }; for(var i = 0; i Rikin

関連する問題