Javascript 角度单击在窗体内激发两次或更多时间

Javascript 角度单击在窗体内激发两次或更多时间,javascript,angularjs,Javascript,Angularjs,我在angular中有一个表单,有两个动态添加新字段。在div按钮内,有一个ng click指令触发,并(当然)处理ng repeat。问题不在于它们不起作用,而是当你点击“添加新”按钮时,它们被执行了三次 我检查了一些基本的东西: 一次被称为一次,而不是多次 browsersync的重影模式已禁用 而且没有问题。问题是(我认为)在角度上的形式的默认行为。。。任何ng点击执行“提交”。。。让我向您展示代码: 这是我的控制器代码,用于添加新字段: $scope.$apply()用于ng rep

我在angular中有一个表单,有两个动态添加新字段。在
div
按钮内,有一个
ng click
指令触发,并(当然)处理
ng repeat
。问题不在于它们不起作用,而是当你点击“添加新”按钮时,它们被执行了三次

我检查了一些基本的东西:

  • 一次被称为一次,而不是多次
  • browsersync的重影模式已禁用
而且没有问题。问题是(我认为)在角度上的形式的默认行为。。。任何ng点击执行“提交”。。。让我向您展示代码:

这是我的控制器代码,用于添加新字段:
$scope.$apply()
用于
ng repeat
,以使用
ng模型中的绑定,以下是公共代码段中的标记(为了简单起见,使用jade):

以及错误屏幕:

3次在单击任何“添加新”按钮时触发相同错误

有什么想法吗。。。提前谢谢

编辑:
safeApply
清除了
$apply已在进行中的问题
,但基本问题仍然存在。我使用$apply使work成为我的
ng repeat
绑定,因为:

.col.s12(ng repeat=“product.cancelations中的取消”)

这是:

input(type=“text”name=“cancellation.inputName”ng model=“cancellation.namePayload”必需)

想法很简单:
cancellation.namePayload
必须是:
product.cancellations.description

由于某些原因,未应用作用域。

1)您需要删除
$scope.$apply()。在您的情况下,它们似乎没有-它们只是将静态项添加到该数组中

2) 尝试替换为:

1) 您需要删除
$scope.$apply()。在您的情况下,它们似乎没有-它们只是将静态项添加到该数组中

2) 尝试替换为:


你的html代码是什么?你怎么能确定这仅仅是因为错误日志控制台而被调用了三次???那么,当我点击一次按钮时,是否触发了三次相同的错误。。。没有@WasiqMuhammad.@MayK html表单代码在链接“GITLAB SNIPPET”中大约有200行,所以实际放在这里。你的html代码是什么?你怎么能确定它被调用了三次仅仅是因为错误日志控制台???嗯,当我点击一次按钮时,会触发三次相同的错误。。。没有@WasiqMuhammad@MayK html表单代码在链接“GITLAB SNIPPET”中,大约有200行,所以实际放在这里。我编辑了这篇文章,日志消失了,但我以前的问题仍然存在。。。谢谢我编辑了帖子,日志消失了,但我以前的问题仍然存在。。。谢谢
        this.cancelations = [
            { 
                namePayload: "product.cancelations.name",
                descriptionPayload: "product.cancelations.description",
                inputName: "inputname-1",
                inputDesc: "inputdesc-1"
            }
        ];

        this.dateforms = [
            {
                daysFormName  : "days_1",
                daysModel     : "product.ranges.days_1",
                fromFormHrs   : "fromHrs_1",
                fromModelHrs  : "product.ranges.fromHrs_1",
                fromFormMins  : "fromMins_1",
                fromModelMins : "product.ranges.fromMins_1",
                toFormHrs     : "toHrs_1",
                toModelHrs    : "product.ranges.toHrs_1",
                toFormMins    : "toMins_1",
                toModelMins   : "product.ranges.toMins_1"
            }
        ];

        this.addDateform = () => {
            let next = this.dateforms.length;

            this.dateforms.push({
                daysFormName  : `days_${next + 1}`,
                daysModel     : `product.ranges.days_${next + 1}`,
                fromFormHrs   : `fromHrs_${next + 1}`,
                fromModelHrs  : `product.ranges.fromHrs_${next + 1}`,
                fromFormMins  : `fromMins_${next + 1}`,
                fromModelMins : `product.ranges.fromMins_${next + 1}`,
                toFormHrs     : `toHrs_${next + 1}`,
                toModelHrs    : `product.ranges.toHrs_${next + 1}`,
                toFormMins    : `toMins_${next + 1}`,
                toModelMins   : `product.ranges.toMins_${next + 1}`
            });

            $scope.$apply();
        };

        this.addPolitic = () => {
            let next = this.cancelations.length;

            this.cancelations.push({ 
                namePayload: `product.cancelationspols.name_${next + 1}`,
                descriptionPayload: `product.cancelationspols.description_${next + 1}`,
                inputName: `inputname-${next + 1}`,
                inputDesc: `inputdesc-${next + 1}`
            });

            $scope.$apply();
        };
$scope.safeApply = function(fn) {
  var phase = this.$root.$$phase;
  if(phase == '$apply' || phase == '$digest') {
    if(fn && (typeof(fn) === 'function')) {
      fn();
    }
  } else {
    this.$apply(fn);
  }
};