javascript - $watch ng-model 变化

标签 javascript angularjs angular-ngmodel

我有以下标记

<li ng-repeat="ticket in tickets">
 <span>{{ticket.name}} - {{ticket.price}}</span>&nbsp;
 <input type="number" 
  value="1" 
  ng-disabled="!ticket.selected" 
  size="2" 
  style="width:34px;" 
  ng-change="ticket.quantity" 
 ng-model="ticket.quantity"/>
 <input type="checkbox" 
  name="choose" 
  ng-click="addToCart($event)" 
  ng-model="ticket.selected" 
  ng-if-false="false" 
  ng-if-true="true" 
  value="{{ticket.id}}"/>
</li>

然后我在 addCart() 上有这个

$scope.addToCart() = function(){ 

var template = '<fieldset id="ticket-'+this.ticket.id+'">' +
     '<input type="hidden" name="item_name_'+$scope.counter+'" value="'+this.ticket.name+'">' +
     '<input type="hidden" name="amount_'+$scope.counter+'" value="'+this.ticket.price+'">' +
     '<input type="hidden" name="on0_'+$scope.counter+'" value="quantity">' +
     '<input type="hidden" name="os0_'+$scope.counter+'" value="'+this.ticket.quantity+'"></fieldset>',
     $el = angular.element('#payform').append(template).find('input[name=os0_' + $scope.counter +']');
     $scope.$watch(this.ticket.quantity,function(){
        console.log(this, 'this', arguments);
        console.log('ticket',ticket);
        console.log($el.attr('name'));
     })
     return false;
}

我正在尝试动态监视传递模型中的更改以更新动态创建的表单元素。

如何实现这一点?如果元素不再存在,继续添加和删除事件的负担有多大?

最佳答案

你正朝着最困难的方向前进。您应该使用 ng-repeat 在您的 View 中添加此模板,而不是在 Controller 内创建元素,这是有史以来最糟糕的做法。您应该将此票证添加到一个数组中,例如 addedTickets 并让 AngularJS 完成最困难的工作:动态渲染它!

例如:

查看

<input type="checkbox" 
 name="choose" 
 ng-click="addToCart(ticket, $index)" 
 ng-if-false="false" 
 ng-if-true="true" 
 ng-model="ticket.selected" />

<fieldset id="ticket-{{t.id}}" ng-repeat="t in addedTickets">
 <input type="hidden" name="item_name_{{$index}}" ng-model="t.name">
 <input type="hidden" name="amount_{{$index}}" ng-model="t.price">
 <input type="hidden" name="on0_{{$index}}" ng-model="t.quantity">
</fieldset>

Controller

$scope.addToCart(ticket, index) {
 if(ticket.selected) 
   $scope.addedTickets.push({name: ticket.name, quantit: ticket.quantity, /*etc*/});
 else
   //delete it
}

关于javascript - $watch ng-model 变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325122/

相关文章:

javascript - 警告 : Each child in an array or iterator should have a unique "key" prop. key 已存在

javascript - 如何使灯箱滚动灯箱而不是页面

javascript - Gatsby.js 博客在帖子中附加了两次 '/blog'

javascript - 从索引页 Angular 检查位置

angularjs - 无法清除表格

javascript - 如何在对象数组中搜索 - javascript

javascript - 如何在 Angularjs 中默认仅启用事件选项卡并禁用所有其他选项卡?

javascript - 使用 Promise 更新数据源时刷新 Kendo 图表

angularjs - 为什么模型不会在这个递归 Angular 指令中更新?

javascript - ng-model 和值组合不适用于输入文本框