功能说明:
??????? 根据某模型的值改变页面上所有input、select输入框是否disabled。
实例说明:
??????? 提供一个按钮,此按钮控制此模型的值,指令再根据此模型的值改变页面input、select输入框是否disabled。
效果展示:
???????? 首次打开页面,input、select输入框是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) { $sco