$渲染停在角1.2.2工作(文件验证指令) [英] $render stopped working at angular 1.2.2 (file validation directive)
问题描述
我从角1.0.8迁移到昨天角度1.2.2,和一堆其他东西,得到打破,我已经固定,在$呈现以下指令不再触发功能的旁边。
有没有人?0之前encouter这样的行为
指令('validFile',函数(utils的,$过滤器){
返回{
要求:'ngModel',
链接:功能(范围,EL,ATTRS,ngModel){ 如果(utils.isMobileAgent())
返回;
。VAR形式= el.parents()找到('形式');
ngModel。$ =渲染功能(){
调试器;
如果(form.hasClass('NG-原始'))
返回; 如果(el.val()及与放大器; el.val()长度大于0){
ngModel $ setViewValue(el.val())。
} 如果(el.hasClass('NG-无效)){
。el.parent()addClass('NG-无效')addClass('NG-无效要求的')。
。ngModel $ setValidity(attrs.name,FALSE);
。ngModel $ setPristine(attrs.name,FALSE);
scope.fileMsg = $过滤器(翻译)(PLEASESELECT')+''+ $过滤器(翻译)(attrs.name);
// scope.layout.showFileError = TRUE;
}
其他{
。el.parent()removeClass移除('NG-无效')removeClass移除('NG-无效要求的')addClass('NG-有效)。
。ngModel $ setValidity(attrs.name,真);
}
};
el.bind('鼠标悬停',函数(){
如果(form.hasClass('NG-脏)及和放大器; el.parent()hasClass('NG-无效'))
el.removeClass('NG-原始');
});
el.bind('鼠标离开',函数(){
如果(el.val()及与放大器; el.val()长度大于0){
el.addClass('NG-原始');
}
})
el.bind('变',函数(){
范围。$应用(函数(){
。ngModel $渲染();
});
});
form.bind('变',函数(){
范围。$应用(函数(){
。ngModel $渲染();
});
});
}
};
});
标记:
<输入类型=文件数据-NG-模式='model.formData.resumeNAME =恢复数据有效文件数据-MY-验证数据 - 价值所需=真>
增加指令的优先级以上的东西0。
例如:
myApp.directive('validFile',函数($过滤器){
返回{
优先权:10,
下面是一个<一个href=\"http://iwang.github.io/html/angular/angularjs/2013/11/04/ngmodel-render-cannot-be-overriden-in-angular-rc3.html\">detailed问题的解释的,我发现与此UI,TinyMCE的问题那是,在它的根一样的你。
的解释在于这种变化导致 输入的短版
的 $渲染
采取precedence在你自己的。通过碰撞你的指令,你的优先级,实际上,给你的 $渲染
先后次序,因为它是在1.2 RC3这样的修改之前。
I have migrated from angular 1.0.8 to angular 1.2.2 yesterday, and beside a bunch of other things that got broken and I've already fixed, the $render function on the following directive is not firing anymore.
Did anyone encouter such a behavior before?0
directive('validFile', function (utils, $filter) {
return {
require: 'ngModel',
link: function (scope, el, attrs, ngModel) {
if(utils.isMobileAgent())
return;
var form = el.parents().find('form');
ngModel.$render = function () {
debugger;
if(form.hasClass('ng-pristine'))
return;
if(el.val() && el.val().length > 0){
ngModel.$setViewValue(el.val());
}
if(el.hasClass('ng-invalid')){
el.parent().addClass('ng-invalid').addClass('ng-invalid-required');
ngModel.$setValidity(attrs.name, false);
ngModel.$setPristine(attrs.name, false);
scope.fileMsg = $filter('translate')('PLEASESELECT') + ' ' + $filter('translate')(attrs.name);
// scope.layout.showFileError = true;
}
else{
el.parent().removeClass('ng-invalid').removeClass('ng-invalid-required').addClass('ng-valid');
ngModel.$setValidity(attrs.name, true);
}
};
el.bind('mouseover', function(){
if(form.hasClass('ng-dirty') && el.parent().hasClass('ng-invalid'))
el.removeClass('ng-pristine');
});
el.bind('mouseleave', function(){
if(el.val() && el.val().length > 0){
el.addClass('ng-pristine');
}
})
el.bind('change', function () {
scope.$apply(function () {
ngModel.$render();
});
});
form.bind('change', function () {
scope.$apply(function () {
ngModel.$render();
});
});
}
};
});
markup:
<input type="file" data-ng-model='model.formData.resume' name="resume" data-valid-file data-my-validate data-value-required="true">
Increase the priority of your directive to something above 0.
For example:
myApp.directive('validFile', function ($filter) {
return {
priority: 10,
Here's a detailed explanation of the problem that I found associated with this ui-tinymce issue that's, at it's root, the same as yours.
The short version of the explanation being that this change causes input
's $render
to take precedence over your own. By bumping the priority of your directive you, in effect, give your $render
priority- as it was before that change in 1.2 rc3.
这篇关于$渲染停在角1.2.2工作(文件验证指令)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!