首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我更改了$provide.decorator中的输入值时,为什么我的角度表单不是脏的?

当你更改了$provide.decorator中的输入值时,角度表单不会被标记为脏的原因是因为$provide.decorator是AngularJS中的一个服务,用于修改或扩展已注册的服务。它的作用是在服务实例化之前对服务进行修改。

在AngularJS中,表单的脏检测是通过监视表单元素的输入值是否发生变化来实现的。当表单元素的输入值发生变化时,AngularJS会将表单标记为脏,从而触发相应的脏检测操作。

然而,$provide.decorator修改的是服务本身,而不是表单元素的输入值。因此,即使你更改了$provide.decorator中的输入值,表单元素的输入值并没有发生变化,所以表单不会被标记为脏。

要使角度表单标记为脏,你需要手动更新表单元素的输入值。你可以通过在控制器中使用$scope.$apply()方法来实现这一点。$scope.$apply()方法会触发AngularJS的脏检测机制,使表单元素的输入值被更新并标记为脏。

以下是一个示例代码:

代码语言:javascript
复制
app.controller('MyController', function($scope) {
  // 在$provide.decorator中更改输入值
  $provide.decorator('myService', function($delegate) {
    $delegate.inputValue = '新的输入值';
    return $delegate;
  });

  // 手动更新表单元素的输入值
  $scope.updateInputValue = function() {
    $scope.myForm.input.$setViewValue('新的输入值');
    $scope.myForm.input.$render();
  };

  // 监听表单元素的输入值变化
  $scope.$watch('myForm.input.$modelValue', function(newValue, oldValue) {
    if (newValue !== oldValue) {
      $scope.myForm.$setDirty();
    }
  });
});

在上面的示例中,我们通过手动更新表单元素的输入值,并在输入值发生变化时将表单标记为脏。这样,即使你更改了$provide.decorator中的输入值,表单也会被正确地标记为脏。

请注意,以上示例中的代码仅为演示目的,并未提及任何腾讯云相关产品。如需了解腾讯云相关产品和产品介绍,请访问腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从单向到双向数据绑定

检测(代表:angular1) 前面说定时器双绑是扯淡 前面特地埋了个坑,关于Angular检查,并不是一些人想象那样子用定时器周期性进行检测(前面写那个超级简单双绑就是人们传闻angular...而我们前面的vue,当我们在控制台改了数据,就可以马上反映到v层。angular并没有这个操作,也没有意义。...因为双绑M->V一般就是基于ui行为、定时器、ajax这些异步动作,所以这就知道为什么ng-model只能对表单有效了。...watch方法来添加,每一个被绑定对象属性是:变量名、变量旧、一个函数(用来返回变量新)、检测变化回调函数。 对于为什么使用一个函数来记录新(类似vuecomputed)?...(){} //监听回调函数,变量“触发 }) } Scope.prototype.

3.6K20

再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

ng-model 是双向数据绑定($scope -> view and view -> $scope),用于绑定会变化表单元素等。 双向数据绑定是 AngularJS 核心机制之一。...实际上, 检查是digest执行,另一个常用用于触发检查函数apply——其实就是 $digest 一个简单封装(还做了一些抓异常工作)。...newValue, oldValue) {     if (newValue === oldValue) { return; }     $scope.updated++; }, true); 表示比较是对象不是引用...所以说不要怀疑用户在输入表单 angular 会不会监听页面左边导航栏变化。 如何优化检查与运行效率 检查慢吗? 说实话检查效率是不高,但是也谈不上有多慢。简单数字或字符串比较能有多慢呢?...ng-click表达式,能使用JS原生对象上方法,比如Math.max之类吗?为什么? 不可以。

7.8K40

从单向到双向数据绑定0.前言1.单向数据(代表:react)2.观察者模式3.双绑中间枢纽——Object.defineproperty(代表:vue)4. 检测(代表:angular1)前面说

检测(代表:angular1) 前面说定时器双绑是扯淡 前面特地埋了个坑,关于Angular检查,并不是一些人想象那样子用定时器周期性进行检测(前面写那个超级简单双绑就是人们传闻angular...而我们前面的vue,当我们在控制台改了数据,就可以马上反映到v层。angular并没有这个操作,也没有意义。...因为双绑M->V一般就是基于ui行为、定时器、ajax这些异步动作,所以这就知道为什么ng-model只能对表单有效了。...对于为什么使用一个函数来记录新(类似vuecomputed)?这样子可以每次调用都得到数据上最新,如果把这个写死,不就是不会变化了吗?这是监控函数一般形式:从作用域获取值再返回。...(){} //监听回调函数,变量“触发 }) } Scope.prototype.

1.6K40

建模与表单动态化设计

当我们尝试去动态化建模,就不得不考虑这些问题。 元数据 我们模型是由字段组成,但是字段并不是最小单位。...字段存储性质可以理解为如果我们要把该字段存储在数据库中所需要属性,当我们在使用 create table 语句,我们就会规定字段存储性质,例如字段数据类型、默认、长度、名称文本、字段解释(含义...这些属性虽然不是最重要,但是在系统是最好实施,最容易看见成果,因此是比较推荐先从这个部分动态化实施,慢慢扩展和研究全部动态化。...因为从用户角度讲,他们关心看得见摸得着表单,而不是相对来说底层实体模型。...当用户在创建一个可输入输入框或类似的组件节点,我们需要将该节点与对应字段予以绑定,而在这个过程,就需要用户自己去填写字段信息,同时把创建好字段放到数据库

2.5K11

MIT 6.824 -- Cache Consistency -- 11

,但是站在目前角度来看,其符合适用于小型团体NFS(网络文件系统)实现。...在这里我们想要是线性一致性和缓存带来好处。对于线性一致性来说,当我查看文件系统任何内容总是能看到最新数据。对于缓存来说,我们想要缓存带来性能提升。...所以,如果创建了一个新文件,create函数返回,这些新文件锁仍然被当前客户端持有。只是说现在锁状态会变成Idle而不是Busy。但是从锁服务器看来,当前客户端仍然持有锁。...因为没有人持有了这个文件缓存,所以就算文件被修改了,也没有人会读到旧数据。 最后再提一下数据写回时机,客户端每隔30秒会将所有修改了缓存写回到Petal。...锁服务器要释放锁,客户端会先向Petal写入Log,之后再向Petal写入块数据,最后才向锁服务器发送Release消息。 之后,其他客户端才能获取锁,并读取相应数据块。

11610

MVCC 水略深,但是弄懂了真的好爽!

,如图1-2: 注意,如果只是修改了当前 session 隔离级别,则换一个 session 之后,隔离级别又会恢复到默认隔离级别,所以我们测试,修改当前 session 隔离级别即可。...当我们要添加一条记录时候,就把添加数据 id 记录到 undo log ,将来回滚时候就据此把数据删除;当我们要删除或者修改数据时候,就把原数据记录到 undo log ,将来据此恢复数据。...如果这个小于数组最小,说明当我们开启当前事务时候,这行数据修改所涉及到事务已经提交了,当前数据行是可见。...如果这个大于数组最大,说明这行数据是我们在开启事务之后,还没有提交时候,有另外一个会话也开启了事务,并且修改了这行数据,那么此时这行数据就是不可见。...另外还有一个需要注意地方,就是如果当前事务涉及到数据更新操作,那么更新操作是在当前读基础上更新,而不是快照读基础上更新,如果是后者则有可能导致数据丢失。

32520

Angularjs1.X进阶笔记(1)—两种不同双向数据绑定

1.1数据从html流向controller 也就是从视图层流向模型层,原生html需要使用表单元素(例如input标签)来收集用户输入信息,Angularjs通过在表单元素上使用ng-model标签...,当用户输入信息,同步将用户输入信息赋值给controller变量: <div id="main" ng-controller="myCtrl"...当我们点击show $scope.testInfo,控制台打印出了$scope.testInfo.content为5,这下证据坐实了,明明说好双向数据绑定,然而当自定义指令scope.pagination...官方建议使用$watch方法来追踪scope变量,而当我们这样做,会发现$watch函数仅能追踪到那些通过修改controller数据模型而影响link函数变量行为并更新视图。...我们可以回顾一下上面在使用双向数据绑定发生异常场景: 使用了原生定时器(Angular你应该使用$interval,$timeout服务) 用类原生方法(bind)为元素添加事件监听器,并在回调函数改了变量

3.4K20

Linux||环境变量

.bashrc 系统配置文件,包含专用于你bash shellbash信息、设置,每次登录或打开新shell,该文件会被自动读取和执行。如果修改了该文件,需要source(类似于重启电脑)。...$PATH which ls 我们知道ls命令完整路径为/bin/ls,那么为什么可以在任何地方直接输入ls去执行命令,而不是提示找不到该命令呢? 这就不得不提到环境变量PATH。...输入ls命令,系统会按照PATH设置去每个PATH定义路径查找ls可执行文件,如果PATH定义路径中有多个ls可执行文件,则执行先查找到同名命令。...我们再回过头来看一下:安装conda最后一步,有一个需要输入yes/no操作,当我输入yes以后,.bashrc文件多出了这么一段代码,export PATH="/home/zwang/anaconda3...当我们运行不同项目,往往会由于不同软件依赖条件和环境不同而通过[conda create -n 环境名]去创建不同小环境。 举个例子,在名为rna小环境下通过conda安装了fastqc。

8.8K10

HTML注入综合指南

“提交”按钮,新登录表单已显示在网页上方。...因此,此登录表单现在已存储到应用程序Web服务器,每当受害者访问此恶意登录页面,该服务器都会呈现该登录表单,他将始终拥有该表单,对他而言看起来很正式。...* 从下图可以看到,当我尝试在**name字段**执行HTML代码,它会以纯文本形式将其放回: [图片] 那么,该漏洞是否已在此处修补?...** [图片] 在“ Repeater”选项卡当我单击**“ Go”**按钮以检查生成**响应时,**发现HTML实体已在此处**解码**为**HTML**: [图片] 因此,我处理了完整...此外,他用“ HTTP_HOST”修改了主机名,并用“ REQUEST_URI”修改了URL请求资源位置,并将其全部放在**$ url**变量

3.7K52

vue高频面试题合集(二)附答案

这七种,只要这些方法执行改了数组内容,就更新内容就好了,是不是很好理解。....lazy 通过这个修饰符,转变为在 change 事件再同步.number 自动将用户输入转化为数值类型.trim 自动过滤用户输入首尾空格键盘事件修饰符.enter.tab.delete (...缓存特性,避免每次获取值,都要重新计算;当我们需要在数据变化时执行异步或开销较大操作,应该使用 watch,使用 watch 选项允许我们执行异步操作 ( 访问一个 API ),限制我们执行该操作频率...diff 算法过程,先会进行新旧节点首尾交叉对比,当无法匹配时候会用新节点 key 与旧节点进行比对,从而找到相应旧节点.准确 : 因为带 key 就不是就地复用了,在 sameNode 函数...key 是为 Vue vnode 唯一标记,通过这个 key,我们 diff 操作可以准确、更快速准确:因为带 key 就不是就地复用了,在 sameNode 函数 a.key === b.key

98330

关于 v-model 你需要知道这一切!

在v-model情况下,它告诉Vue我们想要在template 和data属性之间创建一个双向数据绑定。 使用v-model一个常见用例是在设计表单相关一些元素。...input输入内容,我们会看到我们数据属性正在变化 !...当我们想在自己应用创建一个清晰单向数据流,这是非常有用。但是,在v-model和v-bind之间选择必须小心。...然而,当我们创建自定义组件并处理复杂数据,我们可以释放v-model真正威力。 ~完,是刷碗智,要去刷碗了,我们下期见!...终身学习者 要先坚持分享20年,大家来一起见证吧。 关注专栏 ? 前端小智 前端开发工程师 不是什么大牛,其实想做就是一个传播者。

79620

深入浅出 Vue key

从前篇文章说起 前几天写了一篇文章,sortable.js——Vue 数据更新问题 ,当时自己只是从数据强制刷新角度去分析,而且并没找到真正“元凶”。...key 一个错误使用——使用 index 作为 key 不知道你在写 v-for 时候,会不会直接使用 index 作为它 key ,是的,承认我会,不得不说,这真的不是一个好习惯。...接着改了绑定 key ,因为这里例子比较特殊,我们就认为 item 都不相同 <div v-for="(item,index) in arrData"...这个默认模式是高效,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入) 列表渲染输出。 我们来看带上 key 之后效果 ?...参考 第 1 题:写 React / Vue 项目为什么要在列表组件写 key,其作用是什么?

1.1K10

AngularJS 1 教程

toc 为什么需要前端框架 为什么2016年今天仍然可以学习Angular 1 和jQuery 不同 学习AngularJS 1 作用域、数据双向绑定、模块 Angualr 1实现双向绑定检查...从使用角度来说检查 从性能角度来说检查 指令 directive,以及用指令写组件 Promise 为什么需要前端框架 随着浏览器性能提升,更多Web Page演变为Web App,特别是在中大型项目中...: 数据双向绑定 ,model数据变化了view中就会自动改变,而相应view(表单)变化了,也会自动同步到model。...检查字面理解就是循环对比前后,如果不相同说明就是“然后执行相应操作,直到所有相同,或者超出循环次数范围 如果说scope是入门核心,那么Angualr检查就是入门到精通核心。...从性能角度来说检查 上面例子说明了AngularJS检查特性,手动触发,全局检查。 每次循环都要全部遍历一边$$watchers,而且如果被检测相互有依赖,还要循环多次。

4.6K30

虚拟DOM已死?|TW洞见

探讨了如何在前端开发编写可复用界面元素。本篇文章将从性能和算法角度比较 Binding.scala 和其他框架渲染机制。...你可能用过一些其他 Web 框架,大多使用检查或者虚拟 DOM 机制。和它们相比,Binding.scala 精确数据绑定机制使用简单、代码健壮、性能更高。...比如,你想要在某个 列表顶部插入一项 ,那么 ReactJS 框架会误以为你修改了 每一项 ,然后在尾部插入了一个 。...注意,status 并不是一个普通函数,而是描述变量之间关系特殊表达式,每次渲染只执行其中一部分代码。比如,当 count 改变,只有位于 count.bind 以后代码才会重新计算。...将在下一篇文章中介绍 Binding.scala 如何在渲染 HTML 静态检查语法错误和语义错误,从而避免 bug 。

5.9K50

react20道高频面试题答案总结

从使用者角度而言,很难从使用体验上区分两者,而且在现代浏览器,闭包和类性能只在极端场景下才会有明显差别。所以,基本可认为两者作为组件是完全一致。...在 React,组件负责控制和管理自己状态。如果将HTML表单元素( input、 select、 textarea等)添加到组件,当用户与表单发生交互,就涉及表单数据存储问题。...如下所示, username没有存储在DOM元素内,而是存储在组件状态。每次要更新 username,就要调用 setState更新状态;每次要获取 username,就要获取组件状态。...表单如何呈现由表单元素自身决定。如下所示,表单并没有存储在组件状态,而是存储在表单元素,当要修改表单数据,直接输入表单即可。有时也可以获取元素,再手动修改它。...当要获取表单数据,要首先获取表单元素,然后通过表单元素获取元素。注意:为了方便在组件获取表单元素,通常为元素设置ref属性,在组件内部通过refs属性获取对应DOM元素。

3K10

【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台

让我们继续来做“主线任务”,这一节,我们来做具体用户新增功能。首先,为了简单起见,把主页面改了一些,改是列表那一块。...删去了一些字段,和数据库表对应一致: 现在,我们要实现一个效果,就是当我点击新增用户按钮,就弹出一个框来。因为我们使用是EasyUI组件,所以我们可以用dialog组件来完成那个弹窗界面。...; return; } } 这个saveUser函数,首先是用jQuery去获取每个文本框或者下拉框,然后依次判断是否为空,如果为空,就给出对应提示...username; json.password = password; json.name = name; json.sex = sex; console.log(json); 效果: 这样一来,我们是不是可以拿到表单数据啦...~~"); } } 让我们启动Tomcat服务器,然后打开浏览器,在地址栏输入: http://localhost/student/addUser.do 为什么是.do呢?

1.5K51

浅谈 Angular 项目实战

为什么使用 Angular 不是 Angular 布道者,但如今自称 Angular 派,使用 Angular 做项目让有一种兴奋感。...在经过很长时间学习及准备之后,终于在今年有了项目实战机会,项目很小,是整个系统一个独立模块,但是几乎所有知识都有涉猎,可谓“麻雀虽小五俱全”。本文就是对该项目的一些总结及思考。...通过 Angular 响应式表单可以很容易实现。但是对于模板驱动表单也可以用另类方式实现,比如手动实现一个双向数据绑定,虽然有点麻烦,但却是可行。关于这个话题放到下一篇文章说明。...官方文档关于表单内容非常详细,从用户输入到绑定再到校验,比着葫芦画瓢就可以轻松实现双向数据绑定。...需要特别注意就是,只有当订阅 Observable 实例,它才会开始发布。 订阅要先调用该实例 subscribe() 方法,并把一个观察者对象传给它,用来接收通知。

4.5K00

《代码整洁之道》读书小结

而这一次,因为一些临时性需求变更,自认为写了一部分代码,这部分代码恰恰是bug高发地段,而且也可能会带来后期维护困难。那么如何来重构这部分代码呢?...在写下这部分代码之前,自认为也是用了一些能够用上设计模式,但是随着临时性需求变更不断增加,有时候贪图省事直接在原有代码基础上修改了事,很明显这违反了开放闭合原则。...第一次看这本书是在几年前,可以说这本书对编写代码风格形成了很深影响,而初读此书也有种醍醐灌顶感觉,哦,原来代码还可以这么写。...从命名谈起 当我们在写代码,面临第一个问题大概就是命名,你想创建一个类,需要命名;写函数,需要命名;甚至初始化一个变量,也需要给变量命名。但是一个好命名和差命名,可是有着天差地别的区别的。...其实每次去反思这点时候,觉得可有意思了,讲道理说,有可能做不到,为什么呢,因为水平不够,对语言理解不够透彻,有很多更深层语言特性,还不能熟练应用。

63030

vue如何二次封装一个高频可复用组件

在我们业务里,我们通常会二次封装一些高频业务组件,比如弹框,抽屉,表单等这些业务组件,为什么要二次封装?...在这里有人会奇怪,传入子组件formParams直接在表单上使用了,嘿,这样不是直接修改props吗,但实际上控制台并不会报错,如果你父组件传入是一个基础数据类型,你在子组件里修改是会直接警告你不能修改...,但是你传入是一个对象,你此时修改是对象属性,并没有修改原对象,所以一个非基础数据类型数据,修改内部,是不会警告,这样做也是ok。...组件抽象 我们在components下新建了一个form-modal组件,并注册成全局组件,目标是把弹框内容区域做成可配置化,这样只需要用配置数据就可以渲染出对应内容 <!...,这在react很常见,这里我们也是通过回调方式修改数据,因为vue数据流是单向,所以只能这种方式去修改了 因此在业务我们form-modal就变得通用,更高频了,这样会减少你重复劳动时间,你只需要关注配置接口信息就行

2.1K20
领券