功能说明:
根据某模型的值改变页面上所有input、select输入框是否disabled。
实例说明:
提供一个按钮,此按钮控制此模型的值,指令再根据此模型的值改变页面input、select输入框是否disabled。
效果展示:
首次打开页面,input、select输入框是disabled
点击"Change disabled status"按钮,input、select输入框变为非disabled,再点击,变回disabled,点击依次交替变换。
具体实现:
BJDirective.html(注意,这里必须将jquery放在angular前面,因为jquery放在angular后面,angular会用自己的JQLite,而不用JQuery,这样的结果是如下指令中的element.find('input,select')结果为空数组,达不到效果):
<!doctype html> <html data-ng-app="BJDirective"> <head> <script src="lib/jquery-1.9.1.js"></script> <script src="lib/angular.js"></script> <script src="js/scriptBJDirective.js"></script> </head> <body> <div data-ng-controller="BJCtrl" data-ng-readonly-page="viewLogic.disabled"> Salutation: <input type="text" data-ng-model="salutation"><br> Name: <input type="text" data-ng-model="name"><br> <pre data-ng-bind-template="{{salutation}} {{name}}!"></pre> <button data-ng-click="changeDisabledStatus();">Change disabled status</button> </div> </body> </html>
scriptBJDirective.js:
angular.module("BJDirective", []) .directive("ngReadonlyPage", function(){ return { link: function(scope, element, attr) { var modelName = attr.ngReadonlyPage; if(!modelName) return; scope.$watch(modelName, function (val) { if(val == true) { element.find('select,input').attr('disabled', true); }else if(val == false) { element.find('select,input').removeAttr('disabled'); } }, true); } } }).controller("BJCtrl",function($scope) { $scope.viewLogic = { disabled: true } $scope.salutation = 'Hello'; $scope.name = 'World'; $scope.changeDisabledStatus = function() { if($scope.viewLogic.disabled) { $scope.viewLogic.disabled = false; }else { $scope.viewLogic.disabled = true; } } });
对于指令依赖的关联模型,也可data-ng-readonly-page="‘viewLogic.disabled’",此时,指令内部需用$eval解析。如下所示:
BJDirective.html:
<!doctype html> <html data-ng-app="BJDirective"> <head> <script src="lib/jquery-1.9.1.js"></script> <script src="lib/angular.js"></script> <script src="js/scriptBJDirective.js"></script> </head> <body> <div data-ng-controller="BJCtrl" data-ng-readonly-page="'viewLogic.disabled'"> Salutation: <input type="text" data-ng-model="salutation"><br> Name: <input type="text" data-ng-model="name"><br> <pre data-ng-bind-template="{{salutation}} {{name}}!"></pre> <button data-ng-click="changeDisabledStatus();">Change disabled status</button> </div> </body> </html>
scriptBJDirective.js:
angular.module("BJDirective", []) .directive("ngReadonlyPage", function(){ return { link: function(scope, element, attr) { var modelName = scope.$eval(attr.ngReadonlyPage); scope.$watch(modelName, function (val) { if(val == true) { element.find('select,input').attr('disabled', true); }else if(val == false) { element.find('select,input').removeAttr('disabled'); } }); } } }).controller("BJCtrl",function($scope) { $scope.viewLogic = { disabled: true } $scope.salutation = 'Hello'; $scope.name = 'World'; $scope.changeDisabledStatus = function() { if($scope.viewLogic.disabled) { $scope.viewLogic.disabled = false; }else { $scope.viewLogic.disabled = true; } } });
如果指令关联两个模型,html可以data-ng-readonly-page="{flag1: 'viewLogic1.disabled', flag2: 'viewLogic2.disabled'}"关联,当然指令实现也要相应的改动,如下所示:
BJDirective.html:
<!doctype html> <html data-ng-app="BJDirective"> <head> <script src="lib/jquery-1.9.1.js"></script> <script src="lib/angular.js"></script> <script src="js/scriptBJDirective.js"></script> </head> <body> <div data-ng-controller="BJCtrl" data-ng-readonly-page="{flag1: 'viewLogic1.disabled', flag2: 'viewLogic2.disabled'}"> Salutation: <input type="text" data-ng-model="salutation"><br> Name: <input type="text" data-ng-model="name"><br> <pre data-ng-bind-template="{{salutation}} {{name}}!"></pre> <button data-ng-click="changeDisabledStatus();">Change disabled status</button> </div> </body> </html>
scriptBJDirective.js:
angular.module("BJDirective", []) .directive("ngReadonlyPage", ['$parse',function($parse){ return { link: function(scope, element, attr) { var modelName = scope.$eval(attr.ngReadonlyPage); var fnCallback = function(){ var flag1 = $parse(modelName.flag1)(scope); var flag2 = $parse(modelName.flag2)(scope); if(flag1 == true && flag2 == true) { element.find('select,input').attr('disabled', true); }else { element.find('select,input').removeAttr('disabled'); } }; scope.$watch(modelName.flag1, function () { fnCallback(); }); scope.$watch(modelName.flag2, function () { fnCallback(); }); } } }]).controller("BJCtrl",function($scope) { $scope.viewLogic1 = { disabled: true } $scope.viewLogic2 = { disabled: true } $scope.salutation = 'Hello'; $scope.name = 'World'; $scope.changeDisabledStatus = function() { if($scope.viewLogic1.disabled && $scope.viewLogic2.disabled) { $scope.viewLogic1.disabled = false; $scope.viewLogic2.disabled = false; }else { $scope.viewLogic1.disabled = true; $scope.viewLogic2.disabled = true; } } });
相关推荐
AngularJs入门学习实例,博客文章地址:http://blog.csdn.net/mqy1023/article/details/51540503
AngularJS语法入门02,有疑问的,或者对代码有什么建设性意见的,可以直接去微博(http://blog.csdn.net/microsoftdesigner/article/details/54631316)提出来哦
简单的angularjs指令下拉框。源代码
angularjs 开发实例 angularjs 开发实例angularjs 开发实例angularjs 开发实例
关于angularjs指令的ppt 类容包括内置指令和自定义指令的相关讲解
【AngularJS入门教程02:AngularJS模板】 AngularJS初学者看到中文入门教程,却无法使用GitHub下载到配套的Angular的Seed工程,因此学习曲线大。 在此专门从GitHub下载配套工程打包分享给大家。 本集教程地址: ...
AngularJS指令用于扩展HTML。本文给大家介绍AngularJS入门教程之AngularJS指令,感兴趣的朋友一起学习吧
angular-baidu-maps — 百度地图AngularJs指令示例
AngularJS 指令详细介绍.docx
ANGULARJS入门教程[整理].pdf
AngularJS入门与进阶_源码 AngularJS入门与进阶_源码 AngularJS入门与进阶_源码
angularjs的开发实例,解压,将文件夹方法tomcat中,即可运行。 访问/app/index.html
主要介绍了angularjs指令之绑定策略(@、=、&),AngularJS提供了几种方法能够将指令内部的隔离作用域,同指令外部的作用域进行数据绑定。
AngularJS 中文版 入门 基础 教程, 实例,初学者。 代码 例子。
oauth-ng, 针对 OAuth 2.0隐式流的AngularJS指令 面向 OAuth 2.0 的 AngularJS指令 用于 OAuth 2.0隐式流处理器的AngularJS指令。文档 fork 在github上发送 repo 请求并发送带有主题分支的请求请求。 不要忘了为你的...
AngularJS 指令 AngularJS 通过被称为 指令 的新属性来扩展 HTML。 AngularJS 通过内置的指令来为应用添加功能。 AngularJS 允许你自定义指令。...AngularJS 实例 <!DOCTYPE html> <html>
ionic-rating, 一个angularjs指令,它负责可视化一个星级分级栏 离子分级一个angularjs指令,它负责可视化一个星级的rating,为离子生成。 还可以打印一半的( 仅显示): 为什么?angular-ui 具有相同的速率指令,但它...
ElasticUI, 用于Elasticsearch的AngularJS指令 ElasticUIElasticUI是一套让开发者能够在Elasticsearch之上快速构建前端的AngularJS指令。 它构建在 Elasticsearch DSL的elastic.js 实现之上。用1 英镑的概念是为了在...