

タイトルの通りです。Angularを採用したフォームで、テキストボックスの値が送信されたらcontroller側で空にする処理を書いているのですが、ng-
repeat内で思うように動作しなくて苦戦しているので質問させていただきました。

1つのshopの中にn個のitem_listがあり、そのなかに紐付く形で複数のitemが格納されているという前提です。

shop(1) -> item_list(n) -> item(n)

ng-repeatの外(コメントアウトしている部分のコード)では問題なくフォームを送信後にテキストボックスが空にできるのですが、ng-
repeatの中で同じことができなくて困っています。特定のテキストボックスを空にするのではなく、itemBodyに関連づいたテキストボックスを全て空にしたいだけなくのですが上手くいきません...
どうかよろしくお願いいたします。

[code]

    angular.module('angularApp').controller "ShopController", ($scope) ->
      $scope.addItem = (itemBody, contentId) ->
        $scope.itemBody = ""
    
[/code]

-
[code]

    .container ng-controller="ShopController" ng-init="init()"
    
      //form id="new_item" ng-submit="addItem(itemBody, item_list.id)"
        //input type="text" id="itemBody" ng-model="itemBody"
        //input type="submit" value="追加"
    
      ul
        li ng-repeat="item_list in article.item_lists"
          ul
            li ng-repeat="item in item_list.items"
              input type="submit" value="削除" ng-click="deleteItem(item)"
    
            form id="new_item" ng-submit="addItem(itemBody, item_list.id)"
              input type="text" id="itemBody" ng-model="itemBody"
              input type="submit" value="追加"
    
[/code]


CC BY-SA 3.0
2015-06-27T04:18:53.260
11789
2015-07-29T06:47:13.863
2015-06-29T01:47:03.973
9900
10309
question
angularjs coffeescript
Angularでフォームが送信された後、テキストボックスを空にしたい


`ng-repeat`が新たにスコープを生成するので参照ができていないのだと思います。  
ひとまず下記のように記述すれば入力欄は空になると思います。  
※その他の処理への影響は保証できませんのでご了承ください。

html  
`addItem`の第一引数を`this`に変更

[code]

    form id="new_item" ng-submit="addItem(this, item_list.id)"
      input type="text" id="itemBody" ng-model="itemBody"
      input type="submit" value="追加"
    
[/code]

js  
`addItem`の第一引数を`<object>`に変更  
`itemBody`を`<object>.itemBody`に変更

[code]

    angular.module('angularApp').controller "ShopController", ($scope) ->
      $scope.addItem = (obj, contentId) ->
        obj.itemBody = ""
    
[/code]


CC BY-SA 3.0
2015-06-29T05:48:01.193
11839
2015-06-29T05:48:01.193
3516
11789
answer