我有一个有几个输入元素的表单.输入元素值设置为范围变量.有一个带有ng-click指令的按钮,它包含使用某些逻辑(从作用域变量调用其他方法)的代码,以通过作用域变量确定和设置输入元素值:
myApp.directive('...', function() { return { link: function(scope, element) { var setFormInputValues = function() { scope.variableToBeSetOnButtonClick = scope.objFromOtherDirective.getValue(); }; var submitForm = function() { $(element).find("form")[0].submit() }; }
这个问题是$ apply在执行所有ng-click函数之后才执行,因此在调用submit()时尚未设置输入值.
也许有更好的方法来做到这一点?我能找到的唯一解决方案是将一个$ watch放在variableToBeSetOnButtonClick上,它调用submit(),并尝试在该回调中取消注册$ watch,但这看起来很糟糕.
$timeout()
在提交表单之前尝试添加:
myApp.directive('...', function($timeout) { ... var submitForm = function() { $timeout(function () { $(element).find("form")[0].submit(); }); }; }