Javascript Angular js指令,用于在表单中未保存数据时显示浏览器后退按钮警报

Javascript Angular js指令,用于在表单中未保存数据时显示浏览器后退按钮警报,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我是angularjs的新手。当表单有未保存的数据并且用户按下浏览器后退按钮时,是否有任何方式显示警报。 任何关于如何实现这一点的建议都将不胜感激 更新:: 更新代码 是的,几分钟前我刚刚将此信息提供给另一个用户,在根作用域级别创建一个监视以捕获位置更改: $rootScope.$watch(function() { // fixed function declaration return $location.path(); }, function(newValue, ol

我是angularjs的新手。当表单有未保存的数据并且用户按下浏览器后退按钮时,是否有任何方式显示警报。 任何关于如何实现这一点的建议都将不胜感激

更新::

更新代码

是的,几分钟前我刚刚将此信息提供给另一个用户,在根作用域级别创建一个监视以捕获位置更改:

$rootScope.$watch(function() { // fixed function declaration
   return $location.path();
   },  
   function(newValue, oldValue) {  
      if (newValue != oldValue) { // Update: variable name case should be the same
         // here you can do your tasks
      }
      else {
      }
   },
   true);
是的,几分钟前我刚刚将此信息提供给另一个用户,在根作用域级别创建一个监视以捕获位置更改:

$rootScope.$watch(function() { // fixed function declaration
   return $location.path();
   },  
   function(newValue, oldValue) {  
      if (newValue != oldValue) { // Update: variable name case should be the same
         // here you can do your tasks
      }
      else {
      }
   },
   true);

正如您所发现的,您可以编写一个自定义指令来监视更改。您的更新代码已步入正轨,但是您可以做一些事情来改进:

您的指令按名称引用表单,这限制了表单的可重用性。例如,如果您想在名为myOtherForm的表单上使用相同的指令,该怎么办?当前使用$scope.myForm.$dirty限制了这种灵活性。相反,更好的方法是绑定到链接函数中的formController

实际上不需要监视$location.path,因为绑定到$locationChangeStart将执行相同的操作

我已经编写了一个angularjs指令,您可以使用上面讨论的方法@看


希望您能发现该指令提供了信息。您可以随意从中学习,甚至在项目中使用它

正如您所发现的,您可以编写一个自定义指令来监视更改。您的更新代码已步入正轨,但是您可以做一些事情来改进:

您的指令按名称引用表单,这限制了表单的可重用性。例如,如果您想在名为myOtherForm的表单上使用相同的指令,该怎么办?当前使用$scope.myForm.$dirty限制了这种灵活性。相反,更好的方法是绑定到链接函数中的formController

实际上不需要监视$location.path,因为绑定到$locationChangeStart将执行相同的操作

我已经编写了一个angularjs指令,您可以使用上面讨论的方法@看


希望您能发现该指令提供了信息。您可以随意从中学习,甚至在项目中使用它

我是angularjs新手,你能告诉我应该把angularjs放在哪里吗,在指令或控制器部分,我将发布我的现有代码。请看一下,只是将手表放在指令控制器中,而不是根作用域我刚刚做了dat,但它显示错误未捕获SyntaxError:return$location处出现意外的令牌返回。pathi刚刚根据您的建议更新了修改后的代码。请看一下,无论如何,这不是聊天的正确位置,如果你需要进一步的建议,我们去聊天室吧。我是angularjs新手,你能告诉我这个angularjs应该放在哪里,在指令或控制器部分,我将发布我的现有代码。请看一下,只是将手表放在指令控制器中,而不是根作用域我刚刚做了dat,但它显示错误未捕获SyntaxError:return$location处出现意外的令牌返回。pathi刚刚根据您的建议更新了修改后的代码。请看一下,无论如何,这不是聊天的正确位置,如果你需要进一步的建议,我们去聊天室吧。
$rootScope.$watch(function() { // fixed function declaration
   return $location.path();
   },  
   function(newValue, oldValue) {  
      if (newValue != oldValue) { // Update: variable name case should be the same
         // here you can do your tasks
      }
      else {
      }
   },
   true);