Html 当没有使用表单标记时,angularjs如何检测$dirty?

Html 当没有使用表单标记时,angularjs如何检测$dirty?,html,angularjs,Html,Angularjs,我正在使用$window.addEventListener(“beforeunload”…用于检测是否对页面进行了更改,并且它的工作方式基本上符合预期。我还使用$transitions.onStart…来检测何时使用了后退/前进浏览器按钮。我不理解的是这是如何工作的,因为我的HTML模板中没有任何表单标记,只是在div中输入 我对此做了研究,似乎找不到答案,只是没有必要使用表单标签来检查输入的肮脏程度。我只是不确定这在后台是如何工作的 <div class="modal-header bg

我正在使用$window.addEventListener(“beforeunload”…用于检测是否对页面进行了更改,并且它的工作方式基本上符合预期。我还使用$transitions.onStart…来检测何时使用了后退/前进浏览器按钮。我不理解的是这是如何工作的,因为我的HTML模板中没有任何表单标记,只是在div中输入

我对此做了研究,似乎找不到答案,只是没有必要使用表单标签来检查输入的肮脏程度。我只是不确定这在后台是如何工作的

<div class="modal-header bg-primary">
  <button type="button" class="close" data-dismiss="modal">&times;</button>
  <h4 class="modal-title pull-left">New Note</h4>
  <div class="clearfix"></div>
</div>
<div class="modal-body">
  <input type="textfield" ng-model="detailVM.newNoteContent">
  <button ng-click="detailVM.addNewNote()">
    Save New Note <span class="fa fa-check"></span>
  </button>
</div>
这是我在控制器里的东西


当我将数据输入到输入中,然后尝试重新加载、关闭或单击“上一步”按钮时,会显示消息“您确定要离开此页面吗?”但它是如何检测输入是否脏的?

ng model
不需要以
形式运行验证程序的

从AngularJS文档:

ngModel
指令绑定
输入
选择
文本区域
(或自定义表单) 控件)添加到作用域上的属性,即 由本指令创建和公开

ngModel
负责:

  • 将视图绑定到模型中,其他指令如输入, textarea或选择require
  • 提供验证行为(即。 必填项、号码、电子邮件、url)
  • 保持控件的状态 (有效/无效、肮脏/原始、触摸/未触摸、验证错误)
  • 在元素上设置相关css类(
    ng valid
    ng invalid
    ng dirty
    ng pristite
    ng toucted
    ng untoucted
    ng empty
    ng不为空
    ),包括动画
  • 将控件注册到其 家长
-


如果存在
表单
ngModelController
会将其控件注册到表单中。这为您提供了一个很好的容器,用于跟踪整个输入/控件集的状态。

您看过了吗?我看过了。但这并没有告诉我它是如何检测到输入脏的。
        // For page reloads and attempts to leave the site
        $window.addEventListener('beforeunload', function (e) {
            // Cancel the event
            e.preventDefault();
            // Chrome requires returnValue to be set
            e.returnValue = '';
        });

        // For when a user hits the back button 
        $transitions.onStart({}, function ($transition)
        {
            var answer = confirm("Are you sure you want to leave this page? Changes you made may not be saved.")
            if (!answer) {
                $transition.abort();
                return false;
            }
            return true;
        });