365bet亚洲版登录-bet官网365入口

365bet亚洲版登录拥有超过百间客房,bet官网365入口的文化历经几十年的传承和积淀形成的核心内容获得业界广泛的认可,365bet亚洲版登录是目前信誉最高的娱乐场所,同国内外几百家网上内容供应商建立了合作关系。

render_AngularJS_脚本之家

在本身开头早先ngModel的圈牛时候,有二个主题素材很令自身纠缠,那就是$render(卡塔尔(قطر‎到底是做什么的呢?查了无数资料都只是简来说之述一下,这就令笔者很纠缠了,终于在叁个阳光明媚的上午,笔者到底解决了那一个大主题材料

那么这些$render方法到底是干吗的吧?他的用项正是在$viewValue改动的时候能够再一次绑定model数据,可是大家要静心一点($viewValue和DOM节点的value是例外的卡塔尔国,笔者觉着她们的界别有一点点相仿setTimeout和$timeout的区分,但是又不太肖似。ps:其实modelValue和绑定的数目也可以区别

Input里面模型的值:{{vm.modelTest}}

.directive('modelRender', function () { return { require: 'ngModel', link: function (scope, iElm, iAttrs, ngModelCtrl) { iElm.on('mouseenter', function () { //尝试注释 iElm.val; console.log; //尝试注释 ngModelCtrl.$setViewValue; console.log; //尝试注释 ngModelCtrl.$render(); console.log } } })

那是鼠标未有通过指令的时候的人之常情

1.当大家接收js原生方法设置input的val值的时候,况兼不实行$render函数,大家得以看来input里面包车型客车model值是未曾变化的,可是input的的value是成为了1,何况大家看见不止model值未有变动,ngModel的$viewValue和$modelValue相近也远非生成。大家能够得出结论 (input的value值不肯定等于$viewValue卡塔尔


下一场,大家品尝在施行js原生退换value值之后,实践$render函数是个什么样的场景,

看完上边的推行今后大家开采input的value值并不曾发生变化,也等于说js原生改动input的value值是无用的,那么在这里边我们就足以见见$render的功用了。

小编们得以大胆的前瞻$render的机能跟$apply的功能是相通的,大家在上一章讲过,$apply是以viewValue为主,让modelValue造成viewValue,也正是modelValue -> viewValue,那么$render是或不是以modelValue为主,让viewValue->modelValue呢?


2.接下来大家尝试,使用ng原生改造 也正是说$setviewValue,是怎么展现的吗?

前不久大家讲授掉js原生改换value的办法,而去行使$setViewValue,并且不推行$render函数,直接上结果,大家见到,施行完$setViewValue之后,无论是viewValue和modelValue都是风度翩翩度联手了,不过input里面包车型大巴值却还是是test,在这里边大家再一次证实了拾叁分说法($viewValue和DOM节点的value是例外的)

当今我们在$setViewValue之后接收,$render(卡塔尔(قطر‎看看是何等效果,

世家开掘了啊,$render的机能和$apply的功能极为相似,但是是或不是过多少人在讲$render的时候,都会说model同步到view,作者认为那么些说法不太对,笔者测量检验过在click事件用新鲜花招改善controller中model的值,开掘就算controller的值已经退换了,但是ngModel的值无论是viewValue依旧modelValue都并未有成形,然后尝试用$modelValue的性质强行退换$modelValue,结果还是没意义。

笔者们上边来探视$render的源码

ctrl.$render = function() { element.val(ctrl.$isEmpty ? '' : ctrl.$viewValue); };

那是此中一个,$render在分裂的通令下的代码都不太相符,可是其效果基本大器晚成致,但是自此间大家就足以看看$render的到底在干什么事了。那么$render哪一天接触呢?其实看你和睦想怎么时候调用它,你能够覆盖他的点子,重写,在$watch也好,$viewChange也好。私下认可的触发事件部分特别input的value改动的时候比方单选,还可能有rollbackView(卡塔尔(قطر‎的时候

除此以外二个着实反映$render实践事件的源代码在那处,里面笔者写了讲解,我们应该都能懂

$scope.$watch(function ngModelWatch() { //解析ngModel的表达式,获取内容 var modelValue = ngModelGet; // if scope model value and ngModel value are out of sync // TODO: why not move this to the action fn? //判断表达式的值是否跟modelValue一致 if (modelValue !== ctrl.$modelValue && // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue) ) { //更新modelValue的值 ctrl.$modelValue = ctrl.$$rawModelValue = modelValue; parserValid = undefined; //获取管道信息 var formatters = ctrl.$formatters, idx = formatters.length; var viewValue = modelValue; while  { viewValue = formatters[idx]; } //如果viewValue和ModelValue不一致 if (ctrl.$viewValue !== viewValue) { ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue; ctrl.$render(); ctrl.$$runValidators(modelValue, viewValue, noop); } } //返回解析的表达式 return modelValue; });}];

如上就是我为大家带给的浅谈Angular中ngModel的$render整体内容了,希望大家多多点拨脚本之家~

本文由365bet亚洲版登录发布于服务器&运,转载请注明出处:render_AngularJS_脚本之家

您可能还会对下面的文章感兴趣: