- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了一个自定义输入指令 - counter
具有复位能力。该指令有 require: "ngModel"
.
我正在重置指令 ngModel
的原始状态与 $setPristine()
.不像 $setDirty()
, $setPristine()
不碰$pristine
父窗体的状态。
问:我如何“通知”父表单该指令不再“脏”,以便父表单可以拥有它的 $pristine
状态重置?
请记住,只需调用 form.$setPristine()
还不够,因为表单中可能还有其他“脏”控件,我的指令不会(也不应该)知道。
这是指令的链接功能:
link: function(scope, element, attrs, ngModel){
var original;
ngModel.$render = function(){
original = scope.counter = ngModel.$viewValue;
};
scope.up = function(){
ngModel.$setViewValue(++scope.counter);
};
scope.reset = function(){
scope.counter = original;
ngModel.$setViewValue(scope.counter);
ngModel.$setPristine(); // this sets $pristine on the directive, but not the form
};
}
<div ng-form="form">
<counter ng-model="count"></counter>
</div>
最佳答案
从 Angular 1.3.x 开始,没有内置的解决方案。form.$setPristine()
在其所有子控件上设置原始。 (link to code)ngModel.$setPristine()
仅在自身上设置 $pristine ( link to code )
解决这个问题的一种方法是创建一个与 form
一起存在的指令。指令和劫持form.$setDirty
跟踪脏控件计数。这可能最好在预链接阶段完成(即在子控件开始注册自己之前)。
app.directive("pristinableForm", function() {
return {
restrict: "A",
require: ["pristinableForm", "form"],
link: function(scope, element, attrs, ctrls) {
var me = ctrls[0],
form = ctrls[1];
me.form = form;
me.dirtyCounter = 0;
var formSetDirtyFn = form.$setDirty;
form.$setDirty = function() {
me.dirtyCounter++;
formSetDirtyFn();
};
},
controller: function() {
this.$notifyPristine = function() {
if (this.dirtyCounter === 0) return;
if (this.dirtyCounter === 1) {
this.dirtyCounter = 0;
if (this.form) this.form.$setPristine();
} else {
this.dirtyCounter--;
}
};
}
};
});
require: ["ngModel", "^pristinableForm"]
并调用
pristinableForm.$notifyPristine()
在其重置功能中:
scope.reset = function(){
if (ngModel.$dirty){
scope.counter = original;
ngModel.$setViewValue(scope.counter);
ngModel.$setPristine();
pristinableForm.$notifyPristine();
}
};
<div ng-form="form" pristinable-form>
<counter ng-model="count1"></counter>
<counter ng-model="count2"></counter>
<input ng-model="foo" name="anotherControl">
</div>
关于angularjs - 如何将自定义输入指令及其父表单重置为 $pristine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242788/
如果表单中特定输入的值为空,我尝试禁用materializecss按钮,但只有当表单是$pristine时,我才能使用ng-disable成功禁用它,而不是在输入上。 这有效: data-ng-dis
rails 生成 acts_as_votable:migration忽略 bootsnap-1.3.1,因为它的扩展没有构建。尝试:gem pristine bootsnap --version 1.
我已经实现了一个自定义输入指令 - counter具有复位能力。该指令有 require: "ngModel" . 我正在重置指令 ngModel 的原始状态与 $setPristine() .不像
我已经编写了一个简单的CustomValueAccessor来实现pikaday datepicker。它可以工作,但是当我使用日期选择器选择一个日期并更新属性时,内部输入控件(通过ngModel绑定
我有一个显示 列表的表单元素。它们都共享一个通用的保存按钮,该按钮在表单变脏之前处于禁用状态。然后,一旦用户点击保存按钮,数据就会被提交到服务器。如果服务器成功保存了数据,我想将表单重置为原始状态,
我知道表单元素有一个 $setPristine() 函数,如果我想将 single 设置为 ng-pristine 单元素标签,比如 ,是否有等价的函数? 最佳答案 原始的概念适用于作为整体的形式而不
我喜欢 Subversion 1.7 现在将所有原始内容集中在一个工作副本中。但是,我经常对同一代码库进行多次 check out (主要是为了复制尚不存在的存储功能)。 为了节省磁盘空间,有没有办法
我有一个表单,我需要在我的 $pristine 字段上显示错误。如果我只专注于该领域并专注于而不输入任何内容。但错误从一开始就不应该是可见的。 这是我的fiddle . 这是我的代码...
我有一个带有一些输入的表单,然后是一个打开指令的按钮,一个模式弹出窗口,其中有另一个表单。原始状态不会检测指令中的更改。怎么解决这个问题? SAVE & CLOSE 指令 te
从一位开发人员那里继承项目后,这仍然是我使用 AngularJS 的第一天。我想知道,我的界面上有一个登录/注册表单,一旦提交了项目/表单,它就会隐藏起来。现在,一旦用户提交,是否有正确或适当的方法来
我的用例是我需要根据用户是否更改了表单的值来启用/禁用保存按钮。 当用户单击保存按钮(在进行更改后)时,将进行 AJAX 保存,完成后表单需要再次被视为“原始”,但保持当前值。 我认为设置 form.
以这种形式为例http://plnkr.co/edit/fHEBw6dDdG3IVgnmCLb7?p=preview 我怎样才能把 $pristine SAVE DRAFT 之后表单的状态为真按钮被按
在我的表单中,我有一个 ng-repeat,在该 ng-repeat 中我有一堆字段。有时可能有 3 个字段,有时可能只有 1 个。 我有一个 Angular 来检查 $pristine 的特定字段。
作为一名开发人员,我想在用户使用 React Final Form 成功提交表单时禁用“提交”按钮,并在用户在表单中输入一些新文本时启用“提交”按钮。 当前 变量pristine仅在表单首次加载时将d
我正在使用一个从存储库中 checkout 的大型应用程序,该应用程序的大部分内容位于 .svn/pristine 文件夹中。据我了解,原始文件夹包含我的workingCopy目录中的文件副本 话虽如
经过研究,我仍然陷入困境。我正在使用带有 Angular “预嵌入”的应用程序的最新版本的基础。 我有一个用于添加和编辑数据的表单 - 假设它用于工作并跟踪员工的工作天数。加载 View 时,表单完全
我正在尝试制作一个测验应用程序....但我想向用户提问,这就是为什么我决定制作一个包含很多条件的表单,例如 (ng-if,ng-show, ng-hide),但是我卡在了 this Applicati
我正在尝试围绕 2 个输入框和一个按钮创建一些简单的表单验证。当这些输入字段框为空(原始)时,我希望禁用该按钮。当任一框有值时,我希望按钮能够提交。目前,当输入字段首次呈现时,pristine 属性为
我在 Angular 中有一个表单,其中包含多行字段,其中每一行都是一个 ng-repeat block : 在我的 $scope.processI
我有一个包含大约 100 个问题的表单,每个问题都有一个单选按钮和一些复选框,因此我需要用户能够保存表单并在以后加载它。我还需要检查用户在此 session 中更改了哪些。 本题解决问题:How ca
我是一名优秀的程序员,十分优秀!