Angularjs 指令,函数双向绑定陷入无限循环

Angularjs directive with function two way bound falling into infinite loop

本文关键字:绑定 无限循环 指令 函数 Angularjs      更新时间:2023-09-26

我正在尝试创建一个自定义指令来使用包含数据的<select>组合。此指令具有传递的更改函数,并在模板中使用ng-change。它调用的函数在父级的作用域中,而不是在隔离的指令作用域中。例如:

app.directive('selectDirective', function() {
    return {
        templateUrl: 'templates/myTemplate.html',
        restrict: 'E',
        require: 'ngModel',
        scope: {
            change: '=',
        }
        ...
    }

该指令的调用方式如下:<selectDirective change="myFunction()">

如您所见,我正在使用双向绑定(=)来定义父级范围内的函数。它必须是这种方式,因为我在调用此函数时会更新其他<select>。请注意,在父函数中,我使用指令模型来检索其 id。

我的问题是,一旦调用父函数,它就会陷入无限循环,我找不到出路。有什么想法吗?

通过使用$timeout服务包装函数来解决问题。它将函数添加到队列中,并在角度准备就绪后执行,因此模型也会同步。