ng-disabled 不起作用的解决办法

不知道这算不算 Angular.js 的一个bug。但搜索一番后找到了一个变通的解决办法。

业务需求是这样的, 按钮被点击一次之后就设置为禁用状态, 以阻止多次无效的点击。但现在很多框架都用 <div> 或者其他标签来实现 button 效果。我并不是专业的UI, 不知道这样做到底好不好,该怎么样就怎么样呗。

<button> 上面时 ng-disabled 一切正常(因为 <button> 支持 disabled ):

<button ng-click="do_something()"
    ng-disabled="button_clicked">Click Me</button>

相关的逻辑代码如下:

angular.module(‘ngToggle‘, [])
    .controller(‘AppCtrl‘,[‘$scope‘, function($scope){
    $scope.button_clicked = false;
    $scope.do_something = function() {
    alert("Clicked!");
    $scope.button_clicked = true;
    return false;
    }
}]);

但将 button 变为 <div>后, ng-disabled 标志就不起作用了。它将元素设置为禁用状态(disabled), 但点击的时候依然会触发 ng-click

解决办法是在 ng-click 里面先判断参数的值:

<div ng-click="button_clicked || do_something()"
    ng-disabled="button_clicked">Click Me</div>

很简单也很有效, 一个短路或。 短路或 || 的运算规则是,如果左边的表达式为 true,则返回true, 不再计算右边表达式。

欢迎加入: CNC开源组件开发交流群 316630025

原文链接: http://baudehlo.com/2014/02/24/angular-js-ng-click-still-fires-when-div-is-ngdisabled/

原文日期: 2014年02月24日

翻译日期: 2016年01月07日

翻译人员: 铁锚 http://blog.csdn.net/renfufei

时间: 2024-08-25 04:37:46

ng-disabled 不起作用的解决办法的相关文章

关于welcome-file-list(欢迎页)不起作用的解决办法

今天我遇到了一个问题,就是直接输入http://localhost:8080/xxx-admin/,不是跳转到index.html,而是报404找不到的错误,根据错误信息看明显是没有跳转到index.html,意思就是说welcome-file-list根本就木有起作用.只有我输入确切路径http://localhost:8080/xxx-admin/index.htm才可以. 解决问题一定要从原理入手,所以要先分析welcome-file-list是怎么工作的. welcome-file-li

js代码从页面移植到文件中失效或js代码修改后不起作用的解决办法

最近在做关于网站的项目,总是发生这样的问题 写的javascript代码在页面上没有问题,但是将js代码移植到.js的文件中,在页面上进行调用,总是出现失效等错误 另外修改后的js代码,重新刷新网页仍然不起作用 经过大量搜索并经过验证,可以用下面方法来解决 将js代码封装到js文件中失效的原因可能是js文件中存在中文注释,导致在执行的时候中断,在js文件尽量不要写中文注释 修改后的js代码刷新网页后不起效果可能是因为你所用的浏览器使用缓存的问题,可在浏览器中设置取消使用缓存,并删除临时文件,重启

Stuts2的&quot;struts.devMode&quot;设置成true后,不起作用的解决办法

不用 <constant name="struts.devMode" value="true" /> 改成 <constant name="struts.configuration.xml.reload" value="true"/> 有人说是因为tomcat加了空格的问题,具体不清楚. 下面是4个开发模式常用配置的简介--- <!-- 开启使用开发模式,详细错误提示 --> <!--

Docker容器互联网络报错:WARNING: IPv4 forwarding is disabled. Networking will not work.解决办法(centos7)

Docker容器互联网络报错:WARNING: IPv4 forwarding is disabled. Networking will not work. 解决办法: echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf systemctl restart network 原文地址:https://www.cnblogs.com/pqshen/p/12159955.html

ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法

本文转载至 http://blog.csdn.net/yesjava/article/details/41039961 在ios7中,UITableViewCell左侧会有默认15像素的空白.这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉. 但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero 已经不起作用了.下面是解决办法 首先在viewDidLoad方法加入以下代码: if ([self.tableView

[angular2/4/8]用ng new创建项目卡住的解决办法

官方文档 英文版:https://angular.io/guide/quickstart 中文版:https://angular.cn/guide/quickstart Installing packages for tooling via npm. 在创建新项目时,这一步需要通过npm安装依赖包,于是卡住了 解决办法: ng new my-app --skip-install 然后进入my-app项目中,执行cnpm install安装依赖包(当然首先你要全局安装cnpm) 如果这句不行,就用

QWidget 直接派生类的样式表不起作用的解决办法

从 QWidget 派生一个窗口,使用 stylesheet 设置背景,designer 设置没有问题,或者,通过 setStyleSheet() 设置,代码操作是正确的,编译运行后,却没有背景. 下面为验证例子(通过代码验证,没有使用 designer ): 工程目录结构如下: mywidget.h 示例代码如下: #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> class MyWidget : public QWidget

在字符串资源文件中添加HTML元素,直接使用字符串资源,HTML元素没起作用的解决办法

escape  html  in string resource 一. 需求描述 给TextView赋值res资源库中的字符串资源,注意这里是一个string资源,要实现下面的效果 "未绑定手机号 ? 绑定" ,最后面的俩个字要变红. 二. 实现方法 思路如下,给绑定两个字用<font>做处理. <string > 未绑定手机号? <font color="#0f9afc">绑定</font></string&g

升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法

转:http://www.asklinux.com/app/ios/286# 我们在使用tableview时会发现分割线的左边会短一些,通常可以使用 setSeparatorInset:UIEdgeInsetsZero 来解决.但是升级到XCode6之后,在iOS8里发现没有效果.下面给出解决办法: 首先在viewDidLoad方法中加上如下代码: if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [