AngularJS在发布时忽略禁用
AngularJS ignores disabled on post
我创建了一个指令,将未双击为"活动"的框上的输入设置为禁用。我有一个问题,AngularJS仍然将那些被禁用的输入传递给范围函数。
基本输入HTML:
<div class="selectable-boxes" toggle-inputs>
<div class="box selected">
<div class="form-container">
<div class="form-group">
<input type="text" placeholder="First" name="f1" data-ng-model="fields.information.f1">
</div>
...
所有命名为f1、f2、f3.
指令:
app.directive( 'toggleInputs', function() {
return {
link: function(Scope, element, attrs) {
var $element = element;
$element.find('.box').bind('dblclick', function () {
$element.find('.box').removeClass('selected');
$(this).addClass('selected');
toggleInputDisabled();
});
function toggleInputDisabled() {
$element.find('.box').each(function () {
$(this).find(':input').attr('disabled', !$(this).hasClass('selected')).attr('data-ng-disabled', 'isDisabled');
});
}
toggleInputDisabled();
}
};
});
该指令运行良好。它禁用字段并添加ng-disabled="'isDisabled',我已经设置了$scope.isDisabled = true;
。然而,这些值仍然会在$scope函数上传递。为什么?
Object {f1: "1", f2: "2", f3: "3", f10: "4", f11: "5"…}
我强烈建议在标签上使用禁用的ng,而不是你所追求的难以阅读的jQuery风格的表达式:
NG禁用
因此,属性已经在输入框上,并且只是由代码切换,attribute=逻辑表达式
这是真正的角度工作,并将为你做所有的禁用。我认为修复属性后会导致更多的代码和潜在的更多问题。
一个大胆的例子,取自我的评论:
Plunkr示例
HTML部分:
<div class="form-group">
<input type="text" placeholder="First" name="f1"
data-ng-model="fields.information.f1" ng-show="!hideem" ng-disabled="disabled">
</div>
以及两个控件:
Disable <input type="checkbox" ng-model="disabled" name="diablethem" id="disablethem"/>
Hide <input type="checkbox" ng-model="hideem" name="hideem" id="hideem"/>
根据需要初始化您的项目:
$scope.disabled=false;
$scope.hideem= false;
通过jQuery:设置或更改属性后,必须重新编译元素
function toggleInputDisabled() {
$element.find('.box').each(function () {
$(this).find(':input')
.attr('disabled', !$(this).hasClass('selected'))
.attr('data-ng-disabled', 'isDisabled');
});
}
$compile($element)(scope);
}
不要忘记依赖性:
app.directive( 'toggleInputs', function($compile) { … }
我想出了一个解决方案来解决这个特殊的问题。问题似乎是ng-model
,正如上面的评论所建议的那样,它创建了一个很难真正删除的绑定,我需要该绑定才能真正使用ng-click="function(fields)"
。
所以我创建了一个指令,然后操纵scope将另一个"已替换"的参数添加到我正在使用的对象树中。然后我检查是否存在,并使用这些新值,但这还有另一个问题。
我不得不使用setTimeout(function(){},100);在控制器函数内部实际查找这些新值,因为否则无法找到它们。
app.directive( 'buttonClick', function() {
return {
link: function(scope, element, attrs) {
element.bind('click', function() {
scope.fields.information.replaced = {};
var i = 0;
$('.selectable-boxes .box.selected input').each(function() {
scope.fields.information.replaced['f' + i] = $(this).val();
i++;
});
scope.$apply();
});
}
};
});
相关文章:
- 如何在范围值更改时使用 angularJs 更新 UI
- 模型更改时的AngularJS动画
- 当与之关联的 ng-model 为 false 时,Angularjs 复选框值不会取消选中
- 当对象中的所有变量都为false时,AngularJs禁用按钮
- 在 html5 视频结束时调用 AngularJS 控制器函数
- 通过JS更新时,Angularjs输入不会更改,而不是手动更新
- 为什么当我尝试为iframe-src属性构建URL时,AngularJS会抛出错误
- AngularJS |刷新浏览器时,AngularJS模板会在安全上下文之前加载.如何阻止它
- $locationProvider html5mode导致“;无法获取“;刷新时出错-AngularJS Node应用程
- 当表单字段为空时,angularjs ng模糊
- 当数据在另一个URL上更新时,AngularJS是否可以在一个URL上触发$watch
- 当uib分页被包装在另一个指令中时,AngularJS表数据没有更新
- 使用表达式作为函数的参数时,AngularJS抛出语法解析错误
- 加载模板时出现AngularJS、Localhost和CORS错误
- 使用jQuery日期选择器编辑单元格时出现AngularJS ngGrid问题
- 嵌套数据时的AngularJs表排序
- 使用 ng 样式进行背景渐变时出现 AngularJS 语法错误
- 如何在将数据发布到 REST 端点时在 AngularJS 中格式化日期
- 模型更改时,AngularJS 视图不会更新
- 当无法定义回调时使用angularjs JSONP