2017-04-08 4 views
-2

が定義されていない私は、ボタンのクリックでRemoveItem()関数を呼び出すために持っているのコードを次している、しかし、RemoveItem()機能定義されていないエラーが発生しているAngularJS:関数がエラー

のJavaScriptコード

$scope.AddShoppingItems = function() { 
    console.log('clicked add item'); 

    i++; 
     var div= document.createElement('div'); 
      div.innerHTML = 'Item : <input type="text" name="ShopItem_'+i+'"><input type="button" value="-" onclick="RemoveItem(this)">'; 
    document.getElementById('AddItemTextbox').appendChild(div); 


    } 
$scope.RemoveItem = function(div){ 
console.log('-ve clicked'); 
document.getElementById('AddItemTextbox').removeChild(div.parentNode); 
i--; 
} 
+2

最初にAngularで始める生DOMを操作しないでください。必要に応じてボタンを表示または非表示にするには、テンプレートでAngularディレクティブを使用する必要があります。 – deceze

+0

正確なエラーは何ですか? @deceze –

+0

直面する問題は、あなたが普通のJavaScriptからAngularスコープメソッドを呼び出そうとしていることです。より大きな問題は、このボタンへのあなたのアプローチが完全に非角形的であることです。 – deceze

答えて

0

単にあなたが行ったことにhtml要素を追加することはできません。 html要素をスコープにコンパイルする必要があり、スコープ内のイベントだけがトリガされます。

これを試してください。

$scope.AddShoppingItems = function() { 
    console.log('clicked add item'); 

    i++; 
    var div = document.createElement('div'); 
    div.innerHTML = 'Item : <input type="text" name="ShopItem_' + i + '"><input type="button" value="-" ng-click="RemoveItem(this)">'; 
    var temp = $compile(div)($scope); 
    angular.element(document.getElementById('AddItemTextbox')).append(temp); 

} 
$scope.RemoveItem = function (div) { 
    console.log('-ve clicked'); 
    document.getElementById('AddItemTextbox').removeChild(div.parentNode); 
    i--; 
} 

詳細については、hereをご覧ください。単にonclickイベントをバインドすることはできません。代わりにng-clickを使用してください

0

だけ

ことで、この行を置き換える

div.innerHTML = 'Item : <input type="text" name="ShopItem_'+i+'"> <input type="button" value="-" onclick="RemoveItem(this)">'; 
'; 
document.getElementById('AddItemTextbox').appendChild(div); 

div.innerHTML = 'Item : <input type="text" name="ShopItem_'+i+'"><input type="button" value="-" ng-click="RemoveItem($this)"> 
document.getElementById('AddItemTextbox').appendChild($compile(div)($scope)); 
+0

それはあまり役に立ちません。適切な解決策にもう少し近いですが、 'ng-click'はコンパイルされていなければ何も意味しないので、まだ動作しません。 – dfsq

関連する問題