Angular.js - 表单验证会发出任何事件吗?

fxc*_*xck 10 javascript validation angularjs angular-ui angularjs-scope

问题是,我使用的是ui-router,我有两个视图,一个是工具栏,第二个是表单内容.

现在我想在工具栏中有一个保存按钮,如果没有形式,将禁用该按钮$valid.但这两个是完全不同的范围,它就像:

  • rootScope
    • 工具栏范围
    • 内容范围(带form.$valid)

所以我认为我会通过听取表单发出的某些$ valid事件来处理它.

根据Vojta 在这里说的那些事件应该存在,但我找不到它们在任何地方指定..并且看着这个我看不到任何事件..

我可能会这样做

$scope.$watch('form.$valid', function(newVal, oldVal) {
   $scope.$emit('validityChange', {'form':newVal});
});
Run Code Online (Sandbox Code Playgroud)

但感觉就像使用事件而不是这样会更好

或者我应该尝试完全不同的东西?请注意,我不能将工具栏的ui-view放在内容的ui-view中......并且根据这一点,两个ui-views根本不能具有相同的范围.

小智 0

直接回答问题:我不知道 AngularJS 中的原生表单事件。但是,如您所知,您可以轻松创建自己的事件,这将解决您的问题。

但我的建议是:您正在尝试让两个控制器相互通信。使用事件可能是错误的方法。事件确实应该用于应用程序范围的通知,例如身份验证。

您可以将表单和提交按钮重构为共享同一控制器的两个指令。虽然它们不会共享作用域,但它们将共享可用于通信的控制器对象。我会这样做。

另一种方法是将两个范围相互嵌套。将表单代码移至更高级别的控制器。像这样:

  • 根范围
    • main // 这里是你的表单代码
      • 工具栏 // 提交按钮可以访问功能
      • content // 表单可以访问功能

希望有帮助!