- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
restrict: "A" terminal: true priority: 1-6ren">
我有以下代码:
app.directive "ngDisableOnVar", ($compile) ->
restrict: "A"
terminal: true
priority: 1000
replace:false
scope: {}
compile: compile = (element, attrs) ->
cattr = attrs["ngDisableOnVar"]
element.attr("ng-class", "{'disabled': !#{cattr}}")
element.attr("ng-disabled", "!#{cattr}")
element.removeAttr("ng-disable-on-var")
pre: preLink = (scope, iElement, iAttrs, controller) ->
post: postLink = (scope, iElement, iAttrs, controller) ->
$compile(iElement)(scope)
我试图将代码基于给定的答案 here .基本上,我想要以下内容:
<input ngDisableOnVar="someScopeVariable>
并将其替换为以下内容:
<input ng-class="{'disabled': !someScopeVariable}" ng-disabled="!someScopeVariable">
出了点问题,因为即使我将它们应用于我的元素,它们也始终处于禁用状态,即使范围变量的计算结果为真。我做错了什么?
编辑:我创建了一个 plunker,其中前 2 个按钮是使用 ng-class 和 ng-disabled 创建的,其他 2 个按钮应该通过使用指令对它们应用相同的东西。
这是具有共享范围的 plunker 版本:http://plnkr.co/edit/TebCQL20ubh5AgJ6nMIl?p=preview
这是没有共享范围的:http://plnkr.co/edit/CPm55MrHA8z6Bx4GbxoN?p=preview
问题是,没有共享范围的不会更新。我怎样才能使它们更新,并使条件取决于作为参数传递的变量?
编辑#2:我开始相信范围共享是这两个按钮应该起作用的正确方式,而不是创建一个将两个按钮封装在其中的新指令。虽然不能 100% 确定。
最佳答案
我会同意您的编辑#2,因为它们是相关的。如果我们将它们创建为单独的元素,我们需要以某种方式将相关元素传递给每个元素 => 当我们单击 1 个按钮时,我们会更新自身以及相关元素。
我在这里修改了您的第一种方法以使其起作用:http://plnkr.co/edit/KgYIlATiw9xzTEZt9Jv1?p=preview
在这个例子中,我必须将相关元素传递给每个指令,这样当我们点击时我们可以更新自身和相关元素:
related-element="btnForward"
我在指令中做了一些修改:
scope: {
reactOn: "=", //use property binding instead of function binding
relatedElement:"@"
},
link: function(scope, element, attrs) {
scope.toggle = function(){
scope.reactOn = !scope.reactOn;//toggle current element
var relatedScope = $("#"+scope.relatedElement).scope();//get related element's scope and toggle it
relatedScope.reactOn = !relatedScope.reactOn;
}
//var cattr = attrs.ngDisableReactOn;
element.attr("ng-class", "{'disabled': !reactOn}"); //Use reactOn instead as this is the property of current scope
element.attr("ng-disabled", "!reactOn");
element.attr("ng-click", "toggle()");
element.removeAttr("ng-disable-react-on");
$compile(element)(scope);
}
我们不需要让事情变得复杂。只需创建一个普通指令来包裹 2 个按钮。
myApp.directive("ngDisableReactOn", function($compile) {
return {
restrict: "A",
templateUrl:"ngDisableReactOn.html",
scope: {
can_go_back: "@"
},
link: function(scope, element, attrs) {
scope.goBack = function(){
scope.can_go_back = false;
}
scope.goFwd = function(){
scope.can_go_back = true;
}
}
}
});
模板:
<input type="button" value="go back" ng-click="goBack()" ng-class="{'disabled': !can_go_back}" ng-disabled="!can_go_back">
<input type="button" value="go fwd" ng-click="goFwd()" ng-class="{'disabled': can_go_back}" ng-disabled="can_go_back">
另一种解决方案是创建父指令作为容器。这是我最喜欢的解决方案。使用这种方法,您可以自由更改指令的内部内容,例如添加更多按钮、更多文本……(不需要对模板进行硬编码)父指令用作管理器确保一次只有 1 个活跃的 child :
myApp.directive("ngDisableReactOnContainer", function() { //Container directive to manage all child directives
return {
restrict: 'EA',
replace: true,
transclude: true,//Use transclusion to move inner content to the template
template: '<div ng-transclude></div>',
controller: function() {
var children = [];
this.selectChild = function(activeChild) { //ensure that only 1 child is active at a time
activeChild.active = true;
angular.forEach(children, function(child) {
if (child != activeChild) {
child.active = false;
}
});
}
this.addChild = function(child) {
children.push(child);
}
}
};
});
myApp.directive("ngDisableReactOn", function($compile) {
return {
restrict: "A",
scope:{
active:"@"
},
require: '^?ngDisableReactOnContainer',
link: function(scope, element, attrs, controller) {
scope.active = scope.active === 'true';
controller.addChild(scope);//register itself with the container
scope.select = function(){//When this element is clicked, inform the container to toggle all children accordingly.
controller.selectChild(scope);
}
//Add ng-class and ng-disabled based on your requirement.
element.attr("ng-class", "{'disabled': active}"); //Use active instead as this is the property of current scope
element.attr("ng-disabled", "active");
element.attr("ng-click", "select()");
element.removeAttr("ng-disable-react-on");
$compile(element)(scope);
}
}
});
使用这些指令很简单:
<div ng-disable-react-on-container>
<input ng-disable-react-on type="button" value="button 1" active="true" >
<input ng-disable-react-on type="button" value="button 2" >
<input ng-disable-react-on type="button" value="button 3" >
</div>
关于javascript - 如何创建一个指令,根据条件在目标元素上添加 ng-class 和 ng-disabled?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21484641/
我使用 jQuery 禁用选择下拉列表中的选项。我需要知道使用之间的区别 prop('disabled','disabled') 和 prop('disabled',true) 两者几乎都适用于所有浏
.attr('disabled', 'disabled') 和 .attr('disabled', true) 在我的代码中都有效,但我只是想知道:两者中哪一个更有效和/或哪一个更常用?真的有区别吗?
我的 asp.net mvc View 中有以下脚本:- function disableform(id) { $('#' + id).prop("disabled", true); } 但是
我已经在 Oracle VM Ware 中为我的 ubuntu 可信操作系统安装了 visual studio 代码和依赖项。我用这些命令运行代码。 ssh -X myserver code 但是当我
我有这个函数可以切换输入字段的禁用属性: $('.someElement').click(function(){ if (someCondition) { console.log
自从前几天我升级了 angularjs 后,我一直收到警告。每当我打开 ui.bootstrap 模式时,它都会发生。 这是我在 chrome-beta 44 中收到的警告: angular.js:1
我想限制用户在单击特定按钮时在文本框中输入值,否则设置禁用 false。如果我设置 $("#txtquery").attr("disabled","disabled"); 它将文本框设置为空白。如果切
How do I make a Spinner's "disabled" state look disabled? 可能重复. 我尝试了帖子中提到的解决方案,即 ((Spinner) spinner)
这段代码: $tds = $(this).closest('tr').find(td input,select); $tds.attr('disabled','disabled'); 使我的表格行不
使用 jQM 1.4.0我试图覆盖灰色样式(): input[type="text"]:disabled { opacity: 1.0 !important; color: black
不知道为什么这不起作用。 当人们单击我的应用程序的“编辑”按钮时,禁用的文本字段将变为可编辑: $("#bewerken").click(function(e) { $("input[d
我对以下差异有些困惑: swiftlint:disable:next swiftlint:disable:this 最佳答案 它们都用于禁用单行的快速规则。您还可以为单行启用规则。来自 SwiftLi
我看到一些代码 # pylint: disable=W0123 还有一些 # pylint: disable-msg=W0123 它们只是同义词吗? 最佳答案 从 pylint 0.21.0 开始不推
默认情况下,在桌面上,flutter 中的 btns 在禁用时会更改鼠标光标: 我们想禁用此行为,或替换为不同的光标。 最佳答案 要覆盖 ElevatedButton、TextButton 或 Out
我一直在学习很多关于标准 asp.net 验证器的知识,我的最新发现是关于如何禁用验证器客户端,这非常酷。 现在,如果我的初始帖子启用了验证器,但在客户端,我禁用它,服务器端是否识别客户端更改并保留它
默认情况下,在桌面上,flutter 中的 btns 在禁用时会更改鼠标光标: 我们想禁用此行为,或替换为不同的光标。 最佳答案 要覆盖 ElevatedButton、TextButton 或 Out
这个问题在这里已经有了答案: Should I use CSS :disabled pseudo-class or [disabled] attribute selector or is it a
我有一个 python 脚本,它发送包含文本、html 和 ics 附件的多部分电子邮件。这个想法是,现代电子邮件客户端将呈现 HTML 部分并提供将事件添加到用户日历中的功能。 代码如下: impo
我有一个最初被禁用的按钮: Lorem ipsum 对于此按钮,button.getAttribute('disabled') 返回 "disabled"。但是,当我使用 JavaScript 启用此
在我的一些测试中,我必须确认在设置某些标志时某些 select2 下拉菜单被禁用。为了证实这一点,我发现以下策略似乎有效: Assert.True(element.GetAttribute("disa
我是一名优秀的程序员,十分优秀!