我正在制定一个指令,该指令将基于rootScope变量禁用页面上的所有表单元素(类似于手动为每个项添加ng-disabled,但只是一种更方便的方式。我正在重新编写现有的应用程序,不想挖掘一堆模板)
我需要能够连接多个jqlite .find()语句的结果。看起来jqlite似乎不支持像.find('select,input')之类的调用。我总是得到一个空数组。此外,由于它返回对象,我不能只是连接它们。我可能会从中得到一个facepalm,但我转向你,StackOverflow。
var myApp = angular.module('myApp',[]);
myApp.directive('disableContents', function() {
return {
compile: function(tElem, tAttrs) {
var inputs = tElem.find('input');
var selects = tElem.find('select');
var formItems = SOMETHINGTOJOINTHESTUFFABOVE
angular.forEach(formItems, function(el){
...
到目前为止,我已经提出了什么,但它让我有多个foreach声明。
'use strict';
angular.module('induction').directive('sttiDisabled', function() {
return {
compile: function(tElem, tAttrs) {
var inputs = tElem.find('input');
var selects = tElem.find('select');
var applyDisable = function(el) {
el = angular.element(el);
var prevVal = el.attr('ng-disabled');
prevVal = prevVal? prevVal + ' || ': '';
prevVal += tAttrs['sttiDisabled'];
el.attr('ng-disabled', prevVal);
}
angular.forEach(inputs, function(el){
applyDisable(el);
});
angular.forEach(selects, function(el){
applyDisable(el);
});
}
}
});
答案 0 :(得分:1)
要么我没有安静地理解这个问题,要么解决方案是:
var formItems = inputs.concat(selects);
答案 1 :(得分:1)
如果您在angular.js文件之前引用了jQuery,那么您将获得一个jQuery对象而不是jQLite。还要记住,jQLite是"限制为按标记名称"进行查找。
答案 2 :(得分:1)
jqLite
(angular.element)确实不支持复杂的选择器,因此您必须先使用querySelectorAll选择所需的全部内容,然后使用angular.element
实例包装此集合:
var formControls = angular.element(tElem[0].querySelectorAll('input, select'));